Weiming Zhao wrote:
weimingz created this revision.
weimingz added a reviewer: nicholas.
weimingz added a subscriber: cfe-commits.

r255371 errors on redeclaring with a conflicting asm label.
This patch changes errors to warnings to prevent breaking existing codes.

Can you include a testcase where the warning is issued but clang and gcc emit the same .o file?


http://reviews.llvm.org/D16171

Files:
   include/clang/Basic/DiagnosticSemaKinds.td
   lib/Sema/SemaDecl.cpp
   test/Sema/asm-label.c

Index: test/Sema/asm-label.c
===================================================================
--- test/Sema/asm-label.c
+++ test/Sema/asm-label.c
@@ -7,21 +7,21 @@
  void f() {
    g();
  }
-void g() __asm__("gold");  // expected-error{{cannot apply asm label to 
function after its first use}}
+void g() __asm__("gold");  // expected-warning{{cannot apply asm label to 
function after its first use}}

  void h() __asm__("hose");  // expected-note{{previous declaration is here}}
-void h() __asm__("hair");  // expected-error{{conflicting asm label}}
+void h() __asm__("hair");  // expected-warning{{conflicting asm label}}

  int x;
  int x __asm__("xenon");
  int y;

  int test() { return y; }

-int y __asm__("yacht");  // expected-error{{cannot apply asm label to variable 
after its first use}}
+int y __asm__("yacht");  // expected-warning{{cannot apply asm label to 
variable after its first use}}

  int z __asm__("zebra");  // expected-note{{previous declaration is here}}
-int z __asm__("zooms");  // expected-error{{conflicting asm label}}
+int z __asm__("zooms");  // expected-warning{{conflicting asm label}}


  // No diagnostics on the following.
Index: lib/Sema/SemaDecl.cpp
===================================================================
--- lib/Sema/SemaDecl.cpp
+++ lib/Sema/SemaDecl.cpp
@@ -2385,13 +2385,13 @@
      if (AsmLabelAttr *OldA = Old->getAttr<AsmLabelAttr>()) {
        if (OldA->getLabel() != NewA->getLabel()) {
          // This redeclaration changes __asm__ label.
-        Diag(New->getLocation(), diag::err_different_asm_label);
+        Diag(New->getLocation(), diag::warn_different_asm_label);
          Diag(OldA->getLocation(), diag::note_previous_declaration);
        }
      } else if (Old->isUsed()) {
        // This redeclaration adds an __asm__ label to a declaration that has
        // already been ODR-used.
-      Diag(New->getLocation(), diag::err_late_asm_label_name)
+      Diag(New->getLocation(), diag::warn_late_asm_label_name)
          <<  isa<FunctionDecl>(Old)<<  
New->getAttr<AsmLabelAttr>()->getRange();
      }
    }
Index: include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- include/clang/Basic/DiagnosticSemaKinds.td
+++ include/clang/Basic/DiagnosticSemaKinds.td
@@ -4266,9 +4266,11 @@
  def err_conflicting_types : Error<"conflicting types for %0">;
  def err_different_pass_object_size_params : Error<
    "conflicting pass_object_size attributes on parameters">;
-def err_late_asm_label_name : Error<
-  "cannot apply asm label to %select{variable|function}0 after its first use">;
-def err_different_asm_label : Error<"conflicting asm label">;
+def warn_late_asm_label_name : Warning<
+  "cannot apply asm label to %select{variable|function}0 after its first use">,
+  InGroup<MismatchedTags>;
+def warn_different_asm_label : Warning<"conflicting asm label">,
+  InGroup<MismatchedTags>;
  def err_nested_redefinition : Error<"nested redefinition of %0">;
  def err_use_with_wrong_tag : Error<
    "use of %0 with tag type that does not match previous declaration">;



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to