summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Basic/DiagnosticSemaKinds.td3
-rw-r--r--clang/lib/CodeGen/CGStmt.cpp3
-rw-r--r--clang/lib/Sema/SemaStmt.cpp3
-rw-r--r--clang/test/Parser/MicrosoftExtensions.c2
-rw-r--r--clang/test/Parser/ms-inline-asm.c24
5 files changed, 20 insertions, 15 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index b2035eaac2b..dd3dcabab44 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -4844,6 +4844,9 @@ let CategoryName = "Inline Assembly Issue" in {
"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 {
diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp
index 9bb9c5c772d..1d71cddb6fc 100644
--- a/clang/lib/CodeGen/CGStmt.cpp
+++ b/clang/lib/CodeGen/CGStmt.cpp
@@ -1683,6 +1683,5 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
}
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.
}
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index fb828909c3d..0c9d6aa3048 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -2673,6 +2673,9 @@ StmtResult Sema::ActOnAsmStmt(SourceLocation AsmLoc, bool IsSimple,
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);
diff --git a/clang/test/Parser/MicrosoftExtensions.c b/clang/test/Parser/MicrosoftExtensions.c
index cd03ac8c09c..fd0c5433356 100644
--- a/clang/test/Parser/MicrosoftExtensions.c
+++ b/clang/test/Parser/MicrosoftExtensions.c
@@ -20,7 +20,7 @@ void * __ptr32 PtrToPtr32(const void *p)
void __forceinline InterlockedBitTestAndSet (long *Base, long Bit)
{
- __asm {
+ __asm { // expected-warning {{MS-style inline assembly is not supported}}
mov eax, Bit
mov ecx, Base
lock bts [ecx], eax
diff --git a/clang/test/Parser/ms-inline-asm.c b/clang/test/Parser/ms-inline-asm.c
index 1c8c881dec3..2d181958857 100644
--- a/clang/test/Parser/ms-inline-asm.c
+++ b/clang/test/Parser/ms-inline-asm.c
@@ -3,35 +3,35 @@
#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
OpenPOWER on IntegriCloud