r234767 - [CodeGen] Fix crash with duplicated mangled name.

Renato Golin renato.golin at linaro.org
Wed Apr 15 01:38:40 PDT 2015


Hi,

This patch broke all ARM bots:

http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15-full/builds/4713

static llvm::CastInst*
llvm::CastInst::Create(llvm::Instruction::CastOps, llvm::Value*,
llvm::Type*, const llvm::Twine&, llvm::Instruction*): Assertion
`castIsValid(op, S, Ty) && "Invalid cast!"' failed.

Can you please have a look?

cheers,
--renato

On 13 April 2015 at 18:40, Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:
> Author: akirtzidis
> Date: Mon Apr 13 12:40:46 2015
> New Revision: 234767
>
> URL: http://llvm.org/viewvc/llvm-project?rev=234767&view=rev
> Log:
> [CodeGen] Fix crash with duplicated mangled name.
>
> Patch by Yunzhong Gao!
>
> Added:
>     cfe/trunk/test/CodeGenCXX/duplicate-mangled-name2.cpp
>     cfe/trunk/test/CodeGenCXX/duplicate-mangled-name3.cpp
> Modified:
>     cfe/trunk/lib/CodeGen/CodeGenModule.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=234767&r1=234766&r2=234767&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Mon Apr 13 12:40:46 2015
> @@ -1372,6 +1372,15 @@ void CodeGenModule::EmitGlobal(GlobalDec
>                                /*DontDefer=*/false);
>        return;
>      }
> +
> +    if (llvm::GlobalValue *GV = GetGlobalValue(getMangledName(GD)))
> +      if (!GV->isDeclaration()) {
> +        getDiags().Report(FD->getLocation(), diag::err_duplicate_mangled_name);
> +        GlobalDecl OldGD = Manglings.lookup(GV->getName());
> +        if (auto *Prev = OldGD.getDecl())
> +          getDiags().Report(Prev->getLocation(), diag::note_previous_definition);
> +        return;
> +      }
>    } else {
>      const auto *VD = cast<VarDecl>(Global);
>      assert(VD->isFileVarDecl() && "Cannot emit local var decl as global.");
> @@ -2405,14 +2414,6 @@ void CodeGenModule::EmitGlobalFunctionDe
>      }
>    }
>
> -  if (!GV->isDeclaration()) {
> -    getDiags().Report(D->getLocation(), diag::err_duplicate_mangled_name);
> -    GlobalDecl OldGD = Manglings.lookup(GV->getName());
> -    if (auto *Prev = OldGD.getDecl())
> -      getDiags().Report(Prev->getLocation(), diag::note_previous_definition);
> -    return;
> -  }
> -
>    if (GV->getType()->getElementType() != Ty) {
>      // If the types mismatch then we have to rewrite the definition.
>      assert(GV->isDeclaration() && "Shouldn't replace non-declaration");
>
> Added: cfe/trunk/test/CodeGenCXX/duplicate-mangled-name2.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/duplicate-mangled-name2.cpp?rev=234767&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/duplicate-mangled-name2.cpp (added)
> +++ cfe/trunk/test/CodeGenCXX/duplicate-mangled-name2.cpp Mon Apr 13 12:40:46 2015
> @@ -0,0 +1,9 @@
> +// RUN: %clang_cc1 -triple i686-pc-linux-gnu -emit-llvm-only %s -verify
> +// RUN: %clang_cc1 -triple i686-pc-linux-gnu -femit-all-decls -emit-llvm-only %s -verify
> +
> +void foo(void *p) __asm("_ZN1SC2Ev");
> +void foo(void *p) { } // expected-note {{previous}}
> +
> +struct S {
> +  S() {} // expected-error {{definition with same mangled name as another definition}}
> +} s;
>
> Added: cfe/trunk/test/CodeGenCXX/duplicate-mangled-name3.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/duplicate-mangled-name3.cpp?rev=234767&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/duplicate-mangled-name3.cpp (added)
> +++ cfe/trunk/test/CodeGenCXX/duplicate-mangled-name3.cpp Mon Apr 13 12:40:46 2015
> @@ -0,0 +1,10 @@
> +// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only %s -verify
> +// RUN: %clang_cc1 -triple %itanium_abi_triple -femit-all-decls -emit-llvm-only %s -verify
> +
> +extern "C" {
> +  void _ZN1SC2Ev(void *p) { } // expected-note {{previous}}
> +}
> +
> +struct S {
> +  S() {} // expected-error {{definition with same mangled name as another definition}}
> +} s;
>
>
> _______________________________________________
> 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