Author: Aaron Ballman Date: 2022-10-28T12:45:56-04:00 New Revision: f1c9ef311fa677992798d609b0445f1d7311a8f2
URL: https://github.com/llvm/llvm-project/commit/f1c9ef311fa677992798d609b0445f1d7311a8f2 DIFF: https://github.com/llvm/llvm-project/commit/f1c9ef311fa677992798d609b0445f1d7311a8f2.diff LOG: Add test coverage for WG14 N2322 The changes in this paper add a new recommended practice. I had originally marked Clang as supporting this paper because we're not obligated to follow a recommended practice. However, in retrospect, it seems more useful to document whether we implement the recommendation or not. This adds a test for those changes. Added: clang/test/C/C2x/n2322.c Modified: clang/www/c_status.html Removed: ################################################################################ diff --git a/clang/test/C/C2x/n2322.c b/clang/test/C/C2x/n2322.c new file mode 100644 index 0000000000000..c5ac788fb6ed3 --- /dev/null +++ b/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__\ + ); +} diff --git a/clang/www/c_status.html b/clang/www/c_status.html index d2cefc87dbd35..ab668b630c355 100644 --- a/clang/www/c_status.html +++ b/clang/www/c_status.html @@ -696,7 +696,15 @@ <h2 id="c2x">C2x implementation status</h2> <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> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits