[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