xref: /llvm-project/clang/test/C/C23/n2322.c (revision 50c81128de8616117118564eff22cf508cba7848)
1 // RUN: %clang_cc1 -std=c2x -ast-dump %s | FileCheck %s
2 
3 /* WG14 N2322: partial
4  * Preprocessor line numbers unspecified
5  */
n2322()6 void n2322() {
7   // The line number associated with a pp-token should be the line number of
8   // the first character of the pp-token.
9   "this string literal  \
10    spans multiple lines \
11    before terminating";
12 // CHECK: ImplicitCastExpr {{.*}} <line:9
13 // CHECK-NEXT: StringLiteral {{.*}} <col:3>
14 
15   // The line number associated with a pp-directive should be the line number
16   // of the line with the first # token.
17   // Possible FIXME: The AST node should be on line 1002 if we take the line
18   // number to be associated with the first # token. However, this relies on an
19   // interpretation of the standard definition of "presumed line" to be before
20   // line splices are removed. The standard leaves this unspecified, so this
21   // may not represent an actual issue.
22   #\
23   line\
24   1000
25   "string literal";
26 // CHECK: ImplicitCastExpr {{.*}} <line:1000
27 // CHECK: StringLiteral {{.*}} <col:3>
28 
29   // The line number associated with a macro invocation should be the line
30   // number of the first character of the macro name in the invocation.
31   //
32   // Reset the line number to make it easier to understand the next test.
33   // FIXME: The line number should be 2005 (first letter of the macro name) and
34   // not 2007 (closing parenthesis of the macro invocation).
35   #line 2000
36   #define F( \
37     )        \
38 _\
39 _LINE__
40 
41   _Static_assert(F(\
42   \
43   ) == 2007);
44 
45   // Reset the line number again for ease.
46   #line 2000
47   _Static_assert(2001 == \
48 __LI\
49 NE__\
50   );
51 }
52