Author: alexfh Date: Thu Dec 3 05:37:28 2015 New Revision: 254605 URL: http://llvm.org/viewvc/llvm-project?rev=254605&view=rev Log: Revert "Fix for merging decls in pragma weak Calling CheckFunctionDeclaration so that 2 decls for the 'weak' are merged. Differential Revision: http://reviews.llvm.org/D13048"
This reverts commit r254143 which introduces a crash on the following input: f(char *); g(char *); #pragma weak f = g int g(char *p) {} Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp cfe/trunk/test/CodeGen/pragma-weak.c cfe/trunk/test/Sema/pragma-weak.c Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=254605&r1=254604&r2=254605&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original) +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Thu Dec 3 05:37:28 2015 @@ -5546,22 +5546,17 @@ NamedDecl * Sema::DeclClonePragmaWeak(Na assert(isa<FunctionDecl>(ND) || isa<VarDecl>(ND)); NamedDecl *NewD = nullptr; if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) { + FunctionDecl *NewFD; + // FIXME: Missing call to CheckFunctionDeclaration(). // FIXME: Mangling? // FIXME: Is the qualifier info correct? // FIXME: Is the DeclContext correct? - - LookupResult Previous(*this, II, Loc, LookupOrdinaryName); - LookupParsedName(Previous, TUScope, nullptr, true); - - auto NewFD = FunctionDecl::Create( - FD->getASTContext(), FD->getDeclContext(), Loc, Loc, - DeclarationName(II), FD->getType(), FD->getTypeSourceInfo(), SC_None, - false /*isInlineSpecified*/, FD->hasPrototype(), - false /*isConstexprSpecified*/); - - CheckFunctionDeclaration(TUScope, NewFD, Previous, - false /*IsExplicitSpecialization*/); - + NewFD = FunctionDecl::Create(FD->getASTContext(), FD->getDeclContext(), + Loc, Loc, DeclarationName(II), + FD->getType(), FD->getTypeSourceInfo(), + SC_None, false/*isInlineSpecified*/, + FD->hasPrototype(), + false/*isConstexprSpecified*/); NewD = NewFD; if (FD->getQualifier()) Modified: cfe/trunk/test/CodeGen/pragma-weak.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/pragma-weak.c?rev=254605&r1=254604&r2=254605&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/pragma-weak.c (original) +++ cfe/trunk/test/CodeGen/pragma-weak.c Thu Dec 3 05:37:28 2015 @@ -17,7 +17,6 @@ // CHECK-DAG: @mix2 = weak alias void (), void ()* @__mix2 // CHECK-DAG: @a1 = weak alias void (), void ()* @__a1 // CHECK-DAG: @xxx = weak alias void (), void ()* @__xxx -// CHECK-DAG: @weakfoo = weak alias void {{.*}} @localfoo @@ -174,14 +173,6 @@ label: // CHECK: declare extern_weak i32 @PR16705b() // CHECK: declare extern_weak i32 @PR16705c() -// In this test case, we have a declaration of weakfoo before #pragma weak. -// Test that 2 decls for the weakfoo are merged. -extern void weakfoo(); -void localfoo() { } -#pragma weak weakfoo=localfoo -extern void externmain() { return weakfoo(); } -// CHECK-LABEL: define void @externmain() -// CHECK: call{{.*}}@weakfoo ///////////// TODO: stuff that still doesn't work Modified: cfe/trunk/test/Sema/pragma-weak.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/pragma-weak.c?rev=254605&r1=254604&r2=254605&view=diff ============================================================================== --- cfe/trunk/test/Sema/pragma-weak.c (original) +++ cfe/trunk/test/Sema/pragma-weak.c Thu Dec 3 05:37:28 2015 @@ -9,9 +9,3 @@ void __a3(void) __attribute((noinline)); #pragma weak a3 = __a3 // expected-note {{previous definition}} void a3(void) __attribute((alias("__a3"))); // expected-error {{redefinition of 'a3'}} void __a3(void) {} - -extern void weak2foo(int); // expected-note {{previous declaration is here}} expected-note {{'weak2foo' declared here}} -void local2foo(double d1, double d2) { } -#pragma weak weak2foo=local2foo // expected-error {{conflicting types for 'weak2foo'}} -extern void extern2main() { return weak2foo(); } // expected-error {{too few arguments to function call, expected 1, have 0}} - _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits