[cfe-commits] r158833 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/CodeGen/CGStmt.cpp lib/Sema/SemaStmt.cpp test/Parser/MicrosoftExtensions.c test/Parser/ms-inline-asm.c

Chad Rosier mcrosier at apple.com
Wed Jun 20 11:28:37 PDT 2012


Author: mcrosier
Date: Wed Jun 20 13:28:37 2012
New Revision: 158833

URL: http://llvm.org/viewvc/llvm-project?rev=158833&view=rev
Log:
[ms-style asm] Change the fatal error to an extension warning.  Apparently, this
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.

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

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=158833&r1=158832&r2=158833&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Jun 20 13:28:37 2012
@@ -4844,6 +4844,9 @@
     "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 {

Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmt.cpp?rev=158833&r1=158832&r2=158833&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGStmt.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGStmt.cpp Wed Jun 20 13:28:37 2012
@@ -1683,6 +1683,5 @@
 }
 
 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.
 }

Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=158833&r1=158832&r2=158833&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Wed Jun 20 13:28:37 2012
@@ -2673,6 +2673,9 @@
 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);
 

Modified: cfe/trunk/test/Parser/MicrosoftExtensions.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/MicrosoftExtensions.c?rev=158833&r1=158832&r2=158833&view=diff
==============================================================================
--- cfe/trunk/test/Parser/MicrosoftExtensions.c (original)
+++ cfe/trunk/test/Parser/MicrosoftExtensions.c Wed Jun 20 13:28:37 2012
@@ -20,7 +20,7 @@
 
 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

Modified: cfe/trunk/test/Parser/ms-inline-asm.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/ms-inline-asm.c?rev=158833&r1=158832&r2=158833&view=diff
==============================================================================
--- cfe/trunk/test/Parser/ms-inline-asm.c (original)
+++ cfe/trunk/test/Parser/ms-inline-asm.c Wed Jun 20 13:28:37 2012
@@ -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





More information about the cfe-commits mailing list