1af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer// RUN: %clang_cc1 -fsyntax-only %s 2>&1 | FileCheck -strict-whitespace %s
2bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// RUN: %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck -check-prefix=CHECK-MACHINE %s
3af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer
4af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramerstruct Foo {
5af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer  int bar;
6af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer};
7af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer
8bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// PR13312
9af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramervoid test1() {
10af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer  struct Foo foo;
11af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer  (&foo)☃>bar = 42;
12af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer// CHECK: error: expected ';' after expression
13af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer// Make sure we emit the fixit right in front of the snowman.
14c7bd9fbecd50c1fcdc1092e37023dbb8677d4eedBenjamin Kramer// CHECK: {{^        \^}}
15c7bd9fbecd50c1fcdc1092e37023dbb8677d4eedBenjamin Kramer// CHECK: {{^        ;}}
16bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose
17bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// CHECK-MACHINE: fix-it:"{{.*}}fixit-unicode.c":{11:9-11:9}:";"
18bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose}
19bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose
20bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose
21bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Roseint printf(const char *, ...);
22bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rosevoid test2() {
23bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose  printf("∆: %d", 1L);
24bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// CHECK: warning: format specifies type 'int' but the argument has type 'long'
25bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// Don't crash emitting a fixit after the delta.
26bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// CHECK:  printf("
27bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// CHECK: : %d", 1L);
28bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// Unfortunately, we can't actually check the location of the printed fixit,
29bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// because different systems will render the delta differently (either as a
30bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// character, or as <U+2206>.) The fixit should line up with the %d regardless.
31bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose
32bbe0175255d4da42cd99d93ca1e60c8eabcb4b9aJordan Rose// CHECK-MACHINE: fix-it:"{{.*}}fixit-unicode.c":{23:16-23:18}:"%ld"
33af082c3b163397c040c3a98c7a5f09ee2a0badefBenjamin Kramer}
34