r328712 - [Diag] Avoid emitting a redefinition note if no location is available.
Matt Davis via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 28 09:05:05 PDT 2018
Author: mattd
Date: Wed Mar 28 09:05:05 2018
New Revision: 328712
URL: http://llvm.org/viewvc/llvm-project?rev=328712&view=rev
Log:
[Diag] Avoid emitting a redefinition note if no location is available.
Summary:
The "previous definition is here" note is not helpful if there is no location information. The note will reference nothing in such a case. This patch first checks to see if there is location data, and if so the note diagnostic is emitted.
This fixes PR15409. The issue in the first comment seems to already be resolved. This patch addresses the second example.
Reviewers: bruno, rsmith
Reviewed By: bruno
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D44901
Modified:
cfe/trunk/lib/Sema/SemaDecl.cpp
cfe/trunk/test/Sema/redefine_extname.c
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=328712&r1=328711&r2=328712&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Mar 28 09:05:05 2018
@@ -4057,7 +4057,8 @@ void Sema::notePreviousDefinition(const
}
// Redefinition coming from different files or couldn't do better above.
- Diag(Old->getLocation(), diag::note_previous_definition);
+ if (Old->getLocation().isValid())
+ Diag(Old->getLocation(), diag::note_previous_definition);
}
/// We've just determined that \p Old and \p New both appear to be definitions
Modified: cfe/trunk/test/Sema/redefine_extname.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/redefine_extname.c?rev=328712&r1=328711&r2=328712&view=diff
==============================================================================
--- cfe/trunk/test/Sema/redefine_extname.c (original)
+++ cfe/trunk/test/Sema/redefine_extname.c Wed Mar 28 09:05:05 2018
@@ -4,3 +4,4 @@
#pragma redefine_extname foo_static bar_static
static int foo_static() { return 1; } // expected-warning {{#pragma redefine_extname is applicable to external C declarations only; not applied to function 'foo_static'}}
+unsigned __int128_t; // expected-error {{redefinition of '__int128_t' as different kind of symbol}}
More information about the cfe-commits
mailing list