зеркало из https://github.com/microsoft/clang-1.git
[ms-inline asm] Add an error when trying to compile MS-style inline assembly
for an unsupported architecture. rdar://13063988 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173364 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
9d718635fa
Коммит
ae07378ff9
|
@ -5241,6 +5241,8 @@ let CategoryName = "Inline Assembly Issue" in {
|
||||||
"invalid use of a cast in a inline asm context requiring an l-value: "
|
"invalid use of a cast in a inline asm context requiring an l-value: "
|
||||||
"remove the cast or build with -fheinous-gnu-extensions">;
|
"remove the cast or build with -fheinous-gnu-extensions">;
|
||||||
def err_inline_ms_asm_parsing : Error<"%0">;
|
def err_inline_ms_asm_parsing : Error<"%0">;
|
||||||
|
def err_msasm_unsupported_arch : Error<
|
||||||
|
"Unsupported architecture '%0' for MS-style inline assembly">;
|
||||||
|
|
||||||
def warn_asm_label_on_auto_decl : Warning<
|
def warn_asm_label_on_auto_decl : Warning<
|
||||||
"ignored asm label '%0' on automatic variable">;
|
"ignored asm label '%0' on automatic variable">;
|
||||||
|
|
|
@ -580,8 +580,15 @@ StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc,
|
||||||
SmallVector<Expr*, 4> Exprs;
|
SmallVector<Expr*, 4> Exprs;
|
||||||
SmallVector<StringRef, 4> ClobberRefs;
|
SmallVector<StringRef, 4> ClobberRefs;
|
||||||
|
|
||||||
|
llvm::Triple TheTriple = Context.getTargetInfo().getTriple();
|
||||||
|
llvm::Triple::ArchType ArchTy = TheTriple.getArch();
|
||||||
|
bool UnsupportedArch = ArchTy != llvm::Triple::x86 &&
|
||||||
|
ArchTy != llvm::Triple::x86_64;
|
||||||
|
if (UnsupportedArch)
|
||||||
|
Diag(AsmLoc, diag::err_msasm_unsupported_arch) << TheTriple.getArchName();
|
||||||
|
|
||||||
// Empty asm statements don't need to instantiate the AsmParser, etc.
|
// Empty asm statements don't need to instantiate the AsmParser, etc.
|
||||||
if (AsmToks.empty()) {
|
if (UnsupportedArch || AsmToks.empty()) {
|
||||||
StringRef EmptyAsmStr;
|
StringRef EmptyAsmStr;
|
||||||
MSAsmStmt *NS =
|
MSAsmStmt *NS =
|
||||||
new (Context) MSAsmStmt(Context, AsmLoc, LBraceLoc, /*IsSimple*/ true,
|
new (Context) MSAsmStmt(Context, AsmLoc, LBraceLoc, /*IsSimple*/ true,
|
||||||
|
@ -598,7 +605,7 @@ StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc,
|
||||||
|
|
||||||
// Get the target specific parser.
|
// Get the target specific parser.
|
||||||
std::string Error;
|
std::string Error;
|
||||||
const std::string &TT = Context.getTargetInfo().getTriple().getTriple();
|
const std::string &TT = TheTriple.getTriple();
|
||||||
const llvm::Target *TheTarget(llvm::TargetRegistry::lookupTarget(TT, Error));
|
const llvm::Target *TheTarget(llvm::TargetRegistry::lookupTarget(TT, Error));
|
||||||
|
|
||||||
OwningPtr<llvm::MCAsmInfo> MAI(TheTarget->createMCAsmInfo(TT));
|
OwningPtr<llvm::MCAsmInfo> MAI(TheTarget->createMCAsmInfo(TT));
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
// RUN: %clang_cc1 %s -triple powerpc64-unknown-linux-gnu -fasm-blocks -verify -fsyntax-only
|
||||||
|
|
||||||
|
void f() {
|
||||||
|
__asm nop // expected-error {{Unsupported architecture 'powerpc64' for MS-style inline assembly}}
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче