[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:
Vinicius Tinti 2015-11-20 23:42:39 +00:00
parent 67cf33d9ab
commit 92e68c2766
3 changed files with 25 additions and 2 deletions
clang

View File

@ -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);

View File

@ -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

View File

@ -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 '('