52 lines
2.2 KiB
C
52 lines
2.2 KiB
C
|
/* 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
|