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

Reply via email to