]> granicus.if.org Git - clang/commitdiff
[Diag] Avoid emitting a redefinition note if no location is available.
authorMatt Davis <Matthew.Davis@sony.com>
Wed, 28 Mar 2018 16:05:05 +0000 (16:05 +0000)
committerMatt Davis <Matthew.Davis@sony.com>
Wed, 28 Mar 2018 16:05:05 +0000 (16:05 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328712 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp
test/Sema/redefine_extname.c

index bc3e42739d33e6340e2b54a9e2d631fb75d61d54..6cfc5012f67afad9c6a15794bdd0d77db9ab803b 100644 (file)
@@ -4057,7 +4057,8 @@ void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {
   }
 
   // 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
index 8202176c9f7b5d6509e0ba7f97449a435ec6f90e..b1e8dab9244f8f0767e5e07da666aa5074581d41 100644 (file)
@@ -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}}