[cfe-commits] r166651 - in /cfe/trunk: lib/CodeGen/CGExprCXX.cpp test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
Rafael EspĂndola
rafael.espindola at gmail.com
Thu Oct 25 07:58:40 PDT 2012
Thanks!
On 24 October 2012 20:12, Eli Friedman <eli.friedman at gmail.com> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list