From: Nick Lewycky Date: Mon, 18 Jul 2011 07:11:55 +0000 (+0000) Subject: Don't crash when codegen'ing an empty redecl of a function in C99 mode, when X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f57ef0516c011237a1b6a5b2585b99caf0396bd7;p=clang Don't crash when codegen'ing an empty redecl of a function in C99 mode, when neither was inline. Fixes bug introduced in r135377. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135380 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index d0c285186b..b7884e04cb 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -1782,9 +1782,10 @@ bool FunctionDecl::doesDeclarationForceExternallyVisibleDefinition() const { return false; if (getLinkage() != ExternalLinkage || isInlineSpecified()) return false; - const FunctionDecl *InlineDefinition = 0; - if (hasBody(InlineDefinition)) - return InlineDefinition->isInlineDefinitionExternallyVisible(); + const FunctionDecl *Definition = 0; + if (hasBody(Definition)) + return Definition->isInlined() && + Definition->isInlineDefinitionExternallyVisible(); return false; } diff --git a/test/CodeGen/inline.c b/test/CodeGen/inline.c index cbc428cc22..2f6bd72dab 100644 --- a/test/CodeGen/inline.c +++ b/test/CodeGen/inline.c @@ -91,3 +91,9 @@ void test_test5() { test5(); } __inline int test6() { return 0; } extern int test6(); + + +// No PR#, but this once crashed clang in C99 mode due to buggy extern inline +// redeclaration detection. +void test7() { } +void test7();