From: Hans Wennborg Date: Tue, 29 Nov 2016 22:31:00 +0000 (+0000) Subject: Don't try to merge DLL attributes on redeclaration of invalid decl (PR31069) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e770a95c473a9c6f5b9e20c87c477181e5e28445;p=clang Don't try to merge DLL attributes on redeclaration of invalid decl (PR31069) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@288207 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 58776e8705..e8764a0edf 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/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(OldDecl)) { OldDecl = OldTD->getTemplatedDecl(); if (!IsSpecialization) diff --git a/test/Sema/dllimport.c b/test/Sema/dllimport.c index 0728cf14a8..a7fb00e3f7 100644 --- a/test/Sema/dllimport.c +++ b/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'}}