forked from OSchip/llvm-project
[clang] Disable Unicode in asm files
Clang should not convert tokens to Unicode when preprocessing assembly files. Fixes PR25558. llvm-svn: 253738
This commit is contained in:
parent
67cf33d9ab
commit
92e68c2766
clang
|
@ -1354,7 +1354,9 @@ void Lexer::SkipBytes(unsigned Bytes, bool StartOfLine) {
|
|||
}
|
||||
|
||||
static bool isAllowedIDChar(uint32_t C, const LangOptions &LangOpts) {
|
||||
if (LangOpts.CPlusPlus11 || LangOpts.C11) {
|
||||
if (LangOpts.AsmPreprocessor) {
|
||||
return false;
|
||||
} else if (LangOpts.CPlusPlus11 || LangOpts.C11) {
|
||||
static const llvm::sys::UnicodeCharSet C11AllowedIDChars(
|
||||
C11AllowedIDCharRanges);
|
||||
return C11AllowedIDChars.contains(C);
|
||||
|
@ -1371,7 +1373,9 @@ static bool isAllowedIDChar(uint32_t C, const LangOptions &LangOpts) {
|
|||
|
||||
static bool isAllowedInitiallyIDChar(uint32_t C, const LangOptions &LangOpts) {
|
||||
assert(isAllowedIDChar(C, LangOpts));
|
||||
if (LangOpts.CPlusPlus11 || LangOpts.C11) {
|
||||
if (LangOpts.AsmPreprocessor) {
|
||||
return false;
|
||||
} else if (LangOpts.CPlusPlus11 || LangOpts.C11) {
|
||||
static const llvm::sys::UnicodeCharSet C11DisallowedInitialIDChars(
|
||||
C11DisallowedInitialIDCharRanges);
|
||||
return !C11DisallowedInitialIDChars.contains(C);
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
// RUN: %clang -S %s -o - | FileCheck %s
|
||||
.macro my_macro, trace=1, uaccess=1
|
||||
.if \uaccess
|
||||
// CHECK: .if \uaccess
|
||||
// CHECK-NOT: .if 곎ss
|
||||
// CHECK: my_macro trace=1
|
||||
my_macro trace=1
|
||||
.endif
|
||||
.endm
|
||||
|
||||
foo:
|
||||
my_macro trace=0
|
|
@ -0,0 +1,7 @@
|
|||
// RUN: %clang -S %s -o - | FileCheck %s -check-prefix=ALLOWED
|
||||
// RUN: not %clang -std=c89 -S %s -o - 2>&1 | FileCheck %s -check-prefix=DENIED
|
||||
int \uaccess = 0;
|
||||
// ALLOWED: "곎ss":
|
||||
// ALLOWED-NOT: "\uaccess":
|
||||
// DENIED: warning: universal character names are only valid in C99 or C++; treating as '\' followed by identifier [-Wunicode]
|
||||
// DENIED: error: expected identifier or '('
|
Loading…
Reference in New Issue