diff options
Diffstat (limited to 'test/Frontend/source-col-map.c')
-rw-r--r-- | test/Frontend/source-col-map.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/test/Frontend/source-col-map.c b/test/Frontend/source-col-map.c new file mode 100644 index 0000000..a14023b --- /dev/null +++ b/test/Frontend/source-col-map.c @@ -0,0 +1,37 @@ +// RUN: not %clang_cc1 %s -fsyntax-only -fmessage-length 75 -o /dev/null 2>&1 | FileCheck %s -strict-whitespace + +// Test case for the text diagnostics source column conversion crash. + +// This test case tries to check the error diagnostic message printer, which is +// responsible to create the code snippet shorter than the message-length (in +// number of columns.) +// +// The error diagnostic message printer should be able to handle the non-ascii +// characters without any segmentation fault or assertion failure. If your +// changes to clang frontend crashes this case, it is likely that you are mixing +// column index with byte index which are two totally different concepts. + +// NOTE: This file is encoded in UTF-8 and intentionally contains some +// non-ASCII characters. + +__attribute__((format(printf, 1, 2))) +extern int printf(const char *fmt, ...); + +void test1(Unknown* b); // αααα αααα αααα αααα αααα αααα αααα αααα αααα αααα αααα +// CHECK: unknown type name 'Unknown' +// CHECK-NEXT: void test1(Unknown* b); // αααα αααα αααα αααα αααα αααα αααα ααα... +// CHECK-NEXT: {{^ \^$}} + +void test2(Unknown* b); // αααα αααα αααα αααα αααα αααα αααα αααα αααα + +// CHECK: unknown type name 'Unknown' +// CHECK-NEXT: void test2(Unknown* b); // αααα αααα αααα αααα αααα αααα αααα αααα αααα +// CHECK-NEXT: {{^ \^$}} + +void test3() { + /* αααα αααα αααα αααα αααα αααα αααα αααα αααα αααα */ printf("%d", "s"); +} +// CHECK: format specifies type 'int' but the argument has type 'char *' +// CHECK-NEXT: ...αααα αααα αααα αααα αααα αααα αααα αααα αααα */ printf("%d", "s"); +// CHECK-NEXT: {{^ ~~ \^~~$}} +// CHECK-NEXT: {{^ %s$}} |