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 {{.*}} + + // 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 {{.*}} + + // 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); +} + Index: clang/www/c_status.html =================================================================== --- clang/www/c_status.html +++ clang/www/c_status.html @@ -696,7 +696,15 @@ Preprocessor line numbers unspecified N2322 - Yes + +
Partial + 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 # token. As these are recommended practices + and not normative requirements, Clang's behavior is still conforming. +
+ deprecated attribute