Author: rsmith Date: Tue May 29 18:52:16 2018 New Revision: 333489 URL: http://llvm.org/viewvc/llvm-project?rev=333489&view=rev Log: Make the mangled name collision diagnostic a bit more useful by listing the mangling.
This helps especially when the collision is for a template specialization, where the template arguments are not available from anywhere else in the diagnostic, and are likely relevant to the problem. Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td cfe/trunk/lib/CodeGen/CodeGenModule.cpp cfe/trunk/test/CodeGenCXX/duplicate-mangled-name.cpp cfe/trunk/test/Sema/attr-ifunc.c Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=333489&r1=333488&r2=333489&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Tue May 29 18:52:16 2018 @@ -2820,7 +2820,7 @@ def warn_alias_with_section : Warning< "%select{alias|ifunc}1 will not be in section '%0' but in the same section as the %select{aliasee|resolver}2">, InGroup<IgnoredAttributes>; def err_duplicate_mangled_name : Error< - "definition with same mangled name as another definition">; + "definition with same mangled name '%0' as another definition">; def err_cyclic_alias : Error< "%select{alias|ifunc}0 definition is part of a cycle">; def err_ifunc_resolver_return : Error< Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=333489&r1=333488&r2=333489&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Tue May 29 18:52:16 2018 @@ -2445,8 +2445,8 @@ llvm::Constant *CodeGenModule::GetOrCrea (GD.getCanonicalDecl().getDecl() != OtherGD.getCanonicalDecl().getDecl()) && DiagnosedConflictingDefinitions.insert(GD).second) { - getDiags().Report(D->getLocation(), - diag::err_duplicate_mangled_name); + getDiags().Report(D->getLocation(), diag::err_duplicate_mangled_name) + << MangledName; getDiags().Report(OtherGD.getDecl()->getLocation(), diag::note_previous_definition); } @@ -2744,8 +2744,8 @@ CodeGenModule::GetOrCreateLLVMGlobal(Str (OtherD = dyn_cast<VarDecl>(OtherGD.getDecl())) && OtherD->hasInit() && DiagnosedConflictingDefinitions.insert(D).second) { - getDiags().Report(D->getLocation(), - diag::err_duplicate_mangled_name); + getDiags().Report(D->getLocation(), diag::err_duplicate_mangled_name) + << MangledName; getDiags().Report(OtherGD.getDecl()->getLocation(), diag::note_previous_definition); } @@ -3783,7 +3783,8 @@ void CodeGenModule::emitIFuncDefinition( GlobalDecl OtherGD; if (lookupRepresentativeDecl(MangledName, OtherGD) && DiagnosedConflictingDefinitions.insert(GD).second) { - Diags.Report(D->getLocation(), diag::err_duplicate_mangled_name); + Diags.Report(D->getLocation(), diag::err_duplicate_mangled_name) + << MangledName; Diags.Report(OtherGD.getDecl()->getLocation(), diag::note_previous_definition); } Modified: cfe/trunk/test/CodeGenCXX/duplicate-mangled-name.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/duplicate-mangled-name.cpp?rev=333489&r1=333488&r2=333489&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/duplicate-mangled-name.cpp (original) +++ cfe/trunk/test/CodeGenCXX/duplicate-mangled-name.cpp Tue May 29 18:52:16 2018 @@ -11,7 +11,7 @@ class MyClass { }; void MyClass::meth() { } // expected-note {{previous}} extern "C" { - void _ZN7MyClass4methEv() { } // expected-error {{definition with same mangled name as another definition}} + void _ZN7MyClass4methEv() { } // expected-error {{definition with same mangled name '_ZN7MyClass4methEv' as another definition}} } #elif TEST2 @@ -49,7 +49,7 @@ float foo() { extern "C" void _ZN2T2D2Ev() {}; // expected-note {{previous definition is here}} struct T2 { - ~T2() {} // expected-error {{definition with same mangled name as another definition}} + ~T2() {} // expected-error {{definition with same mangled name '_ZN2T2D2Ev' as another definition}} }; void foo() { @@ -64,7 +64,7 @@ extern "C" { } namespace nm { - float abc = 2; // expected-error {{definition with same mangled name as another definition}} + float abc = 2; // expected-error {{definition with same mangled name '_ZN2nm3abcE' as another definition}} } float foo() { Modified: cfe/trunk/test/Sema/attr-ifunc.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-ifunc.c?rev=333489&r1=333488&r2=333489&view=diff ============================================================================== --- cfe/trunk/test/Sema/attr-ifunc.c (original) +++ cfe/trunk/test/Sema/attr-ifunc.c Tue May 29 18:52:16 2018 @@ -36,7 +36,7 @@ void f1a() __asm("f1"); void f1a() {} //expected-note@-1 {{previous definition is here}} void f1() __attribute__((ifunc("f1_ifunc"))); -//expected-error@-1 {{definition with same mangled name as another definition}} +//expected-error@-1 {{definition with same mangled name 'f1' as another definition}} void* f1_ifunc() { return 0; } void* f6_ifunc(int i); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits