Author: steven_wu Date: Mon May 11 16:14:09 2015 New Revision: 237048 URL: http://llvm.org/viewvc/llvm-project?rev=237048&view=rev Log: Allow AsmLabel with -fno-gnu-inline-asm
Summary: AsmLabel is heavily used in system level and firmware to redirect function and access platform specific labels. They are also extensively used in system headers which makes this option unusable for many users. Since AsmLabel doesn't introduce any assembly code into the output binary, it shouldn't be considered as inline-asm. Reviewers: bob.wilson, rnk Reviewed By: rnk Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D9679 Modified: cfe/trunk/lib/Parse/Parser.cpp cfe/trunk/test/Parser/no-gnu-inline-asm.c Modified: cfe/trunk/lib/Parse/Parser.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/Parser.cpp?rev=237048&r1=237047&r2=237048&view=diff ============================================================================== --- cfe/trunk/lib/Parse/Parser.cpp (original) +++ cfe/trunk/lib/Parse/Parser.cpp Mon May 11 16:14:09 2015 @@ -669,6 +669,11 @@ Parser::ParseExternalDeclaration(ParsedA SourceLocation StartLoc = Tok.getLocation(); SourceLocation EndLoc; + + // Check if GNU-style InlineAsm is disabled. + if (!getLangOpts().GNUAsm) + Diag(StartLoc, diag::err_gnu_inline_asm_disabled); + ExprResult Result(ParseSimpleAsm(&EndLoc)); ExpectAndConsume(tok::semi, diag::err_expected_after, @@ -1253,10 +1258,6 @@ ExprResult Parser::ParseSimpleAsm(Source assert(Tok.is(tok::kw_asm) && "Not an asm!"); SourceLocation Loc = ConsumeToken(); - // Check if GNU-style InlineAsm is disabled. - if (!getLangOpts().GNUAsm) - Diag(Loc, diag::err_gnu_inline_asm_disabled); - if (Tok.is(tok::kw_volatile)) { // Remove from the end of 'asm' to the end of 'volatile'. SourceRange RemovalRange(PP.getLocForEndOfToken(Loc), Modified: cfe/trunk/test/Parser/no-gnu-inline-asm.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/no-gnu-inline-asm.c?rev=237048&r1=237047&r2=237048&view=diff ============================================================================== --- cfe/trunk/test/Parser/no-gnu-inline-asm.c (original) +++ cfe/trunk/test/Parser/no-gnu-inline-asm.c Mon May 11 16:14:09 2015 @@ -1,6 +1,10 @@ // RUN: %clang_cc1 %s -triple i686-apple-darwin -verify -fsyntax-only -fno-gnu-inline-asm asm ("INST r1, 0"); // expected-error {{GNU-style inline assembly is disabled}} + +void foo() __asm("__foo_func"); // AsmLabel is OK +int foo1 asm("bar1") = 0; // OK + void f (void) { long long foo = 0, bar; asm volatile("INST %0, %1" : "=r"(foo) : "r"(bar)); // expected-error {{GNU-style inline assembly is disabled}} _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
