aaron.ballman updated this revision to Diff 471554. aaron.ballman marked an inline comment as done. aaron.ballman added a comment.
Added an additional test case. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D136942/new/ https://reviews.llvm.org/D136942 Files: clang/test/C/C2x/n2322.c clang/www/c_status.html Index: clang/www/c_status.html =================================================================== --- clang/www/c_status.html +++ clang/www/c_status.html @@ -696,7 +696,15 @@ <tr> <td>Preprocessor line numbers unspecified</td> <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2322.htm">N2322</a></td> - <td class="full" align="center">Yes</td> + <td class="partial" align="center"> + <details><summary>Partial</summary> + The line number associated with a macro invocation is not the line + number of the first character of the macro name in the invocation. + Additionally, Clang may not associate the line number of a pp-directive + with the first <code>#</code> token. As these are recommended practices + and not normative requirements, Clang's behavior is still conforming. + </details> + </td> </tr> <tr> <td>deprecated attribute</td> Index: clang/test/C/C2x/n2322.c =================================================================== --- /dev/null +++ clang/test/C/C2x/n2322.c @@ -0,0 +1,51 @@ +// 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__\ + ); +}
Index: clang/www/c_status.html =================================================================== --- clang/www/c_status.html +++ clang/www/c_status.html @@ -696,7 +696,15 @@ <tr> <td>Preprocessor line numbers unspecified</td> <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2322.htm">N2322</a></td> - <td class="full" align="center">Yes</td> + <td class="partial" align="center"> + <details><summary>Partial</summary> + The line number associated with a macro invocation is not the line + number of the first character of the macro name in the invocation. + Additionally, Clang may not associate the line number of a pp-directive + with the first <code>#</code> token. As these are recommended practices + and not normative requirements, Clang's behavior is still conforming. + </details> + </td> </tr> <tr> <td>deprecated attribute</td> Index: clang/test/C/C2x/n2322.c =================================================================== --- /dev/null +++ clang/test/C/C2x/n2322.c @@ -0,0 +1,51 @@ +// 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__\ + ); +}
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits