"invalid use of a cast in a inline asm context requiring an l-value: "
"accepted due to -fheinous-gnu-extensions, but clang may remove support "
"for this in the future">;
+
+ def warn_unsupported_msasm : ExtWarn<
+ "MS-style inline assembly is not supported">, InGroup<Microsoft>;
}
let CategoryName = "Semantic Issue" in {
}
void CodeGenFunction::EmitMSAsmStmt(const MSAsmStmt &S) {
- // Analyze the asm string to decompose it into its pieces.
- llvm::report_fatal_error("MS-style asm codegen isn't yet supported.");
+ // MS-style inline assembly is not fully supported, so sema emits a warning.
}
StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc,
std::string &AsmString,
SourceLocation EndLoc) {
+ // MS-style inline assembly is not fully supported, so emit a warning.
+ Diag(AsmLoc, diag::warn_unsupported_msasm);
+
MSAsmStmt *NS =
new (Context) MSAsmStmt(Context, AsmLoc, AsmString, EndLoc);
#define M __asm int 0x2c
#define M2 int
-void t1(void) { M }
-void t2(void) { __asm int 0x2c }
-void t3(void) { __asm M2 0x2c }
-void* t4(void) { __asm mov eax, fs:[0x10] }
+void t1(void) { M } // expected-warning {{MS-style inline assembly is not supported}}
+void t2(void) { __asm int 0x2c } // expected-warning {{MS-style inline assembly is not supported}}
+void t3(void) { __asm M2 0x2c } // expected-warning {{MS-style inline assembly is not supported}}
+void* t4(void) { __asm mov eax, fs:[0x10] } // expected-warning {{MS-style inline assembly is not supported}}
void t5() {
- __asm {
+ __asm { // expected-warning {{MS-style inline assembly is not supported}}
int 0x2c ; } asm comments are fun! }{
}
- __asm {}
+ __asm {} // no warning as this gets merged with the previous inline asm
}
int t6() {
- __asm int 3 ; } comments for single-line asm
- __asm {}
+ __asm int 3 ; } comments for single-line asm // expected-warning {{MS-style inline assembly is not supported}}
+ __asm {} // no warning as this gets merged with the previous inline asm
- __asm int 4
+ __asm int 4 // no warning as this gets merged with the previous inline asm
return 10;
}
int t7() {
- __asm {
+ __asm { // expected-warning {{MS-style inline assembly is not supported}}
push ebx
mov ebx, 0x07
pop ebx
}
}
void t8() {
- __asm nop __asm nop __asm nop
+ __asm nop __asm nop __asm nop // expected-warning {{MS-style inline assembly is not supported}}
}
void t9() {
- __asm nop __asm nop ; __asm nop
+ __asm nop __asm nop ; __asm nop // expected-warning {{MS-style inline assembly is not supported}}
}
int t_fail() { // expected-note {{to match this}}
__asm