summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2016-11-29 22:31:00 +0000
committerHans Wennborg <hans@hanshq.net>2016-11-29 22:31:00 +0000
commita6714922d100fc9ca90cfc4dc4bb0df875206197 (patch)
tree7c786e1d9e0de7f849435a2542e38ca715bcc63a
parent47f7f30df9eced812c16f07acd5979ab2a14cd7c (diff)
downloadbcm5719-llvm-a6714922d100fc9ca90cfc4dc4bb0df875206197.tar.gz
bcm5719-llvm-a6714922d100fc9ca90cfc4dc4bb0df875206197.zip
Don't try to merge DLL attributes on redeclaration of invalid decl (PR31069)
llvm-svn: 288207
-rw-r--r--clang/lib/Sema/SemaDecl.cpp3
-rw-r--r--clang/test/Sema/dllimport.c4
2 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 58776e8705b..e8764a0edf5 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -5651,6 +5651,9 @@ static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl,
NamedDecl *NewDecl,
bool IsSpecialization,
bool IsDefinition) {
+ if(OldDecl->isInvalidDecl())
+ return;
+
if (TemplateDecl *OldTD = dyn_cast<TemplateDecl>(OldDecl)) {
OldDecl = OldTD->getTemplatedDecl();
if (!IsSpecialization)
diff --git a/clang/test/Sema/dllimport.c b/clang/test/Sema/dllimport.c
index 0728cf14a8e..a7fb00e3f77 100644
--- a/clang/test/Sema/dllimport.c
+++ b/clang/test/Sema/dllimport.c
@@ -210,6 +210,10 @@ __declspec(dllimport) void redecl6();
void redecl7();
__declspec(dllimport) inline void redecl7() {}
+// PR31069: Don't crash trying to merge attributes for redeclaration of invalid decl.
+void __declspec(dllimport) redecl8(unknowntype X); // expected-error{{unknown type name 'unknowntype'}}
+void redecl8(unknowntype X) { } // expected-error{{unknown type name 'unknowntype'}}
+
// External linkage is required.
__declspec(dllimport) static int staticFunc(); // expected-error{{'staticFunc' must have external linkage when declared 'dllimport'}}
OpenPOWER on IntegriCloud