[PATCH] D136942: [C2x] Add test coverage for WG14 N2322
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 28 05:00:07 PDT 2022
aaron.ballman created this revision.
aaron.ballman added reviewers: clang-language-wg, erichkeane, jyknight.
Herald added a project: All.
aaron.ballman requested review of this revision.
Herald added a project: clang.
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. However, the recommended practice is just tricky enough to test, I wanted a second set of eyes on my test coverage to see if there's agreement I'm testing the right things and have come to the right conclusion.
Repository:
rG LLVM Github Monorepo
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,45 @@
+// 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);
+}
+
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D136942.471496.patch
Type: text/x-patch
Size: 2643 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221028/7cafe5df/attachment.bin>
More information about the cfe-commits
mailing list