| // RUN: %clang_cc1 -std=c2x -ast-dump %s | FileCheck %s |
| |
| /* WG14 N2322: partial |
| * Preprocessor line numbers unspecified |
| */ |
| void n2322() { |
| // The line number associated with a pp-token should be the line number of |
| // the first character of the pp-token. |
| "this string literal \ |
| spans multiple lines \ |
| before terminating"; |
| // CHECK: ImplicitCastExpr {{.*}} <line:9 |
| // CHECK-NEXT: StringLiteral {{.*}} <col:3> |
| |
| // The line number associated with a pp-directive should be the line number |
| // of the line with the first # token. |
| // Possible FIXME: The AST node should be on line 1002 if we take the line |
| // number to be associated with the first # token. However, this relies on an |
| // interpretation of the standard definition of "presumed line" to be before |
| // line splices are removed. The standard leaves this unspecified, so this |
| // may not represent an actual issue. |
| #\ |
| line\ |
| 1000 |
| "string literal"; |
| // CHECK: ImplicitCastExpr {{.*}} <line:1000 |
| // CHECK: StringLiteral {{.*}} <col:3> |
| |
| // The line number associated with a macro invocation should be the line |
| // number of the first character of the macro name in the invocation. |
| // |
| // Reset the line number to make it easier to understand the next test. |
| // FIXME: The line number should be 2005 (first letter of the macro name) and |
| // not 2007 (closing parenthesis of the macro invocation). |
| #line 2000 |
| #define F( \ |
| ) \ |
| _\ |
| _LINE__ |
| |
| _Static_assert(F(\ |
| \ |
| ) == 2007); |
| |
| // Reset the line number again for ease. |
| #line 2000 |
| _Static_assert(2001 == \ |
| __LI\ |
| NE__\ |
| ); |
| } |