]> granicus.if.org Git - clang/commitdiff
[ms-style asm] Change the fatal error to an extension warning. Apparently, this
authorChad Rosier <mcrosier@apple.com>
Wed, 20 Jun 2012 18:28:37 +0000 (18:28 +0000)
committerChad Rosier <mcrosier@apple.com>
Wed, 20 Jun 2012 18:28:37 +0000 (18:28 +0000)
error was asserting on anything that included Windows.h.  MS-style inline asm is
still dropped, but at least now we're not completely silent about it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158833 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/CodeGen/CGStmt.cpp
lib/Sema/SemaStmt.cpp
test/Parser/MicrosoftExtensions.c
test/Parser/ms-inline-asm.c

index b2035eaac2b0a1c5b728f32b108b4900f7ddbdb7..dd3dcabab4476735f3e5b9ef072929df3e9ffbd5 100644 (file)
@@ -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 {
index 9bb9c5c772da5082eedf1647b492aed25d9d051f..1d71cddb6fc977f2b8bf305a5421e2a59fab648a 100644 (file)
@@ -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.
 }
index fb828909c3d5d1b818a578e3519947de2235f17b..0c9d6aa3048223497e1741158b5d1feea806de89 100644 (file)
@@ -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);
 
index cd03ac8c09c6a37f23a7c1d88850b0356f4bda0e..fd0c543335642b0d177b30d69dcfc51dffa46915 100644 (file)
@@ -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
index 1c8c881dec362efcafdb4555101f5aea847f854a..2d181958857bc39fc20e75f559898597c4791fce 100644 (file)
@@ -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