1 // This file contains code and checks, that should work on any platform. 2 // There's a set of additional checks for systems with proper support of UTF-8 3 // on the standard output in fixit-unicode-with-utf8-output.c. 4 5 // RUN: not %clang_cc1 -fsyntax-only %s 2>&1 | FileCheck -strict-whitespace %s 6 // RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck -check-prefix=CHECK-MACHINE %s 7 8 struct Foo { 9 int bar; 10 }; 11 12 // PR13312 13 void test1() { 14 struct Foo foo; 15 foo.bar = 42 16 // CHECK: error: non-ASCII characters are not allowed outside of literals and identifiers 17 // CHECK: {{^ \^}} 18 // CHECK: error: expected ';' after expression 19 // Make sure we emit the fixit right in front of the snowman. 20 // CHECK: {{^ \^}} 21 // CHECK: {{^ ;}} 22 23 // CHECK-MACHINE: fix-it:"{{.*}}":{[[@LINE-8]]:15-[[@LINE-8]]:18}:"" 24 // CHECK-MACHINE: fix-it:"{{.*}}":{[[@LINE-9]]:15-[[@LINE-9]]:15}:";" 25 } 26 27 28 int printf(const char *, ...); 29 void test2() { 30 printf(": %d", 1L); 31 // CHECK: warning: format specifies type 'int' but the argument has type 'long' 32 // Don't crash emitting a fixit after the delta. 33 // CHECK: printf(" 34 // CHECK: : %d", 1L); 35 // Unfortunately, we can't actually check the location of the printed fixit, 36 // because different systems will render the delta differently (either as a 37 // character, or as <U+2206>.) The fixit should line up with the %d regardless. 38 39 // CHECK-MACHINE: fix-it:"{{.*}}":{[[@LINE-9]]:16-[[@LINE-9]]:18}:"%ld" 40 } 41 42 void test3() { 43 int ssss = 42; 44 int a = sss; // expected-error{{use of undeclared identifier 'sss'; did you mean 'ssss'?}} 45 // CHECK: {{^ \^}} 46 // CHECK: {{^ [^ ]+ssss}} 47 // CHECK-MACHINE: fix-it:"{{.*}}":{[[@LINE-3]]:11-[[@LINE-3]]:17}:"\340\270\201ssss" 48 49 int ssss = 42; 50 int b = sss; // expected-error{{use of undeclared identifier 'sss'; did you mean 'ssss'?}} 51 // CHECK: {{^ \^}} 52 // CHECK: {{^ ss.+ss}} 53 // CHECK-MACHINE: fix-it:"{{.*}}":{[[@LINE-3]]:11-[[@LINE-3]]:17}:"ss\340\270\201ss" 54 55 int s = 42; 56 int b = ss; // expected-error{{use of undeclared identifier 'ss'; did you mean 's'?}} 57 // CHECK-MACHINE: fix-it:"{{.*}}":{[[@LINE-1]]:32-[[@LINE-1]]:43}:"s\344\270\200\344\272\214\344\270\211" 58 59 60 int sssssssss = 42; 61 int c = sssssssss; // expected-error{{use of undeclared identifier 'sssssssss'; did you mean 'sssssssss'?}} 62 // CHECK: {{^ \^}} 63 // CHECK: {{^ sssssssss.+}} 64 // CHECK-MACHINE: fix-it:"{{.*}}":{[[@LINE-3]]:11-[[@LINE-3]]:20}:"sssssssss\340\270\201" 65 } 66