diff options
-rw-r--r-- | clang/lib/Lex/Lexer.cpp | 4 | ||||
-rw-r--r-- | clang/test/Preprocessor/assembler-with-cpp.c | 3 |
2 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp index 3817afe75d1..c071455da66 100644 --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -2730,6 +2730,10 @@ uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc, StartPtr = CurPtr; } + // Don't apply C family restrictions to UCNs in assembly mode + if (LangOpts.AsmPreprocessor) + return CodePoint; + // C99 6.4.3p2: A universal character name shall not specify a character whose // short identifier is less than 00A0 other than 0024 ($), 0040 (@), or // 0060 (`), nor one in the range D800 through DFFF inclusive.) diff --git a/clang/test/Preprocessor/assembler-with-cpp.c b/clang/test/Preprocessor/assembler-with-cpp.c index 65be5647861..f03cb06ea11 100644 --- a/clang/test/Preprocessor/assembler-with-cpp.c +++ b/clang/test/Preprocessor/assembler-with-cpp.c @@ -72,6 +72,9 @@ 11: T11(b) // CHECK-Identifiers-True: 11: #0 +// Universal character names can specify basic ascii and control characters +12: \u0020\u0030\u0080\u0000 +// CHECK-Identifiers-False: 12: \u0020\u0030\u0080\u0000 // This should not crash // rdar://8823139 |