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