Author: rjmccall
Date: Mon Jan 25 16:27:48 2010
New Revision: 94458
URL: http://llvm.org/viewvc/llvm-project?rev=94458&view=rev
Log:
Warn on top-level 'asm volatile' (instead of misparsing it).
"Fixes" rdar://problem/7574870
Modified:
cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
cfe/trunk/lib/Parse/Parser.cpp
cfe/trunk/test/Sema/asm.c
Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=94458&r1=94457&r2=94458&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Mon Jan 25 16:27:48
2010
@@ -14,6 +14,8 @@
let Component = "Parse" in {
def w_asm_qualifier_ignored : Warning<"ignored %0 qualifier on asm">;
+def warn_file_asm_volatile : Warning<
+ "meaningless 'volatile' on asm outside function">;
def ext_empty_source_file : Extension<"ISO C forbids an empty source file">;
def ext_top_level_semi : Extension<
Modified: cfe/trunk/lib/Parse/Parser.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/Parser.cpp?rev=94458&r1=94457&r2=94458&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/Parser.cpp (original)
+++ cfe/trunk/lib/Parse/Parser.cpp Mon Jan 25 16:27:48 2010
@@ -835,6 +835,11 @@
assert(Tok.is(tok::kw_asm) && "Not an asm!");
SourceLocation Loc = ConsumeToken();
+ if (Tok.is(tok::kw_volatile)) {
+ Diag(Tok, diag::warn_file_asm_volatile);
+ ConsumeToken();
+ }
+
if (Tok.isNot(tok::l_paren)) {
Diag(Tok, diag::err_expected_lparen_after) << "asm";
return ExprError();
Modified: cfe/trunk/test/Sema/asm.c
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/asm.c?rev=94458&r1=94457&r2=94458&view=diff
==============================================================================
--- cfe/trunk/test/Sema/asm.c (original)
+++ cfe/trunk/test/Sema/asm.c Mon Jan 25 16:27:48 2010
@@ -76,3 +76,6 @@
asm volatile("foo %0 %1" : "=a" (a) :"0" (b)); // expected-error {{input
with type 'unsigned long long' matching output with type 'int'}}
return a;
}
+
+// <rdar://problem/7574870>
+asm volatile (""); // expected-warning {{meaningless 'volatile' on asm outside
function}}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits