Thanks!
On 24 October 2012 20:12, Eli Friedman <[email protected]> wrote: > Author: efriedma > Date: Wed Oct 24 19:12:49 2012 > New Revision: 166651 > > URL: http://llvm.org/viewvc/llvm-project?rev=166651&view=rev > Log: > When we're devirtualizing a method call, make sure the method has the correct > IR type. > > Reported in the thread "devirtualisation appears to crash clang on covariant > functions on ARM" on cfe-dev. > > > Modified: > cfe/trunk/lib/CodeGen/CGExprCXX.cpp > cfe/trunk/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp > > Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=166651&r1=166650&r2=166651&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Wed Oct 24 19:12:49 2012 > @@ -259,16 +259,16 @@ > } > > // Compute the function type we're calling. > + const CXXMethodDecl *CalleeDecl = DevirtualizedMethod ? > DevirtualizedMethod : MD; > const CGFunctionInfo *FInfo = 0; > - if (isa<CXXDestructorDecl>(MD)) > - FInfo = &CGM.getTypes().arrangeCXXDestructor(cast<CXXDestructorDecl>(MD), > + if (const CXXDestructorDecl *Dtor = > dyn_cast<CXXDestructorDecl>(CalleeDecl)) > + FInfo = &CGM.getTypes().arrangeCXXDestructor(Dtor, > Dtor_Complete); > - else if (isa<CXXConstructorDecl>(MD)) > - FInfo = &CGM.getTypes().arrangeCXXConstructorDeclaration( > - > cast<CXXConstructorDecl>(MD), > - Ctor_Complete); > + else if (const CXXConstructorDecl *Ctor = > dyn_cast<CXXConstructorDecl>(CalleeDecl)) > + FInfo = &CGM.getTypes().arrangeCXXConstructorDeclaration(Ctor, > + Ctor_Complete); > else > - FInfo = &CGM.getTypes().arrangeCXXMethodDeclaration(MD); > + FInfo = &CGM.getTypes().arrangeCXXMethodDeclaration(CalleeDecl); > > llvm::Type *Ty = CGM.getTypes().GetFunctionType(*FInfo); > > > Modified: > cfe/trunk/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp?rev=166651&r1=166650&r2=166651&view=diff > ============================================================================== > --- cfe/trunk/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp > (original) > +++ cfe/trunk/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp > Wed Oct 24 19:12:49 2012 > @@ -131,8 +131,7 @@ > // CHECK: alloca > // CHECK-NEXT: store > // CHECK-NEXT: load > - // CHECK-NEXT: bitcast > - // CHECK-NEXT: call {{.*}} @_ZN5Test73zed1fEv > + // CHECK-NEXT: call i32 @_ZN5Test73zed1fEv > // CHECK-NEXT: ret > return static_cast<bar*>(z)->f(); > } > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
