| /* RUN: rm -rf %t && mkdir %t |
| RUN: cp %s %t/dr324.c |
| |
| Note: this file (dr324.c) must be newer than the file used for the |
| dependency pragma (dep.c), otherwise we get an unrelated "current file is |
| older than dependency" warning. Touch dep.c first to make sure it's |
| always older. |
| RUN: touch %t/dep.c |
| RUN: touch %t/dr324.c |
| |
| RUN: %clang_cc1 -std=c89 -fsyntax-only -fms-extensions -pedantic -verify %t/dr324.c |
| RUN: %clang_cc1 -std=c99 -fsyntax-only -fms-extensions -pedantic -verify %t/dr324.c |
| RUN: %clang_cc1 -std=c11 -fsyntax-only -fms-extensions -pedantic -verify %t/dr324.c |
| RUN: %clang_cc1 -std=c17 -fsyntax-only -fms-extensions -pedantic -verify %t/dr324.c |
| RUN: %clang_cc1 -std=c2x -fsyntax-only -fms-extensions -pedantic -verify %t/dr324.c |
| */ |
| |
| /* WG14 DR324: yes |
| * Tokenization obscurities |
| */ |
| |
| /* We need to diagnose an unknown escape sequence in a string or character |
| * literal, but not within a header-name terminal. |
| */ |
| const char *lit_str = "\y"; /* expected-warning {{unknown escape sequence '\y'}} */ |
| char lit_char = '\y'; /* expected-warning {{unknown escape sequence '\y'}} */ |
| |
| /* This gets trickier in a pragma where there are implementation-defined |
| * locations that may use a header-name production. The first pragma below |
| * is using \d but it's in a header-name use rather than a string-literal use. |
| * The second pragma is a string-literal and so the \d is invalid there. |
| */ |
| #ifdef _WIN32 |
| /* This test only makes sense on Windows targets, where the backslash is a valid |
| * path separator. |
| */ |
| #pragma GCC dependency "oops\..\dep.c" |
| #endif |
| #pragma message("this has a \t tab escape and an invalid \d escape") /* expected-warning {{this has a tab escape and an invalid d escape}} |
| expected-warning {{unknown escape sequence '\d'}} |
| */ |
| |
| /* |
| * Note, this tests the behavior of a non-empty source file that ends with a |
| * partial preprocessing token such as an unterminated string or character |
| * literal. Thus, it is important that no code be added after this test case. |
| */ |
| /* expected-error@+3 {{expected identifier or '('}} |
| expected-warning@+3 {{missing terminating ' character}} |
| */ |
| 't |