nicholas added a subscriber: nicholas.
nicholas added a comment.

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">;



http://reviews.llvm.org/D16171



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

Reply via email to