From: Benjamin Kramer Date: Sun, 20 Nov 2011 21:05:04 +0000 (+0000) Subject: CodeGen: allow __asm renaming on static local variables. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c247db14566f4668efb63cf5184e62dd40039b5;p=clang CodeGen: allow __asm renaming on static local variables. Fixes PR4777. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145015 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index d685847155..3935df02df 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "CGCXXABI.h" #include "CGDebugInfo.h" #include "CodeGenFunction.h" #include "CodeGenModule.h" @@ -177,7 +178,14 @@ CodeGenFunction::CreateStaticVarDecl(const VarDecl &D, QualType Ty = D.getType(); assert(Ty->isConstantSizeType() && "VLAs can't be static"); - std::string Name = GetStaticDeclName(*this, D, Separator); + // Use the label if the variable is renamed with the asm-label extension. + std::string Name; + if (D.hasAttr()) { + llvm::raw_string_ostream Out(Name); + CGM.getCXXABI().getMangleContext().mangleName(&D, Out); + } else { + Name = GetStaticDeclName(*this, D, Separator); + } llvm::Type *LTy = CGM.getTypes().ConvertTypeForMem(Ty); llvm::GlobalVariable *GV = diff --git a/test/CodeGen/asm-label.c b/test/CodeGen/asm-label.c index 7be2ad3cc7..c06f11fd2d 100644 --- a/test/CodeGen/asm-label.c +++ b/test/CodeGen/asm-label.c @@ -2,11 +2,18 @@ // RUN: %clang_cc1 -triple=i686-apple-darwin9 -emit-llvm %s -o - | FileCheck %s --check-prefix=DARWIN char *strerror(int) asm("alias"); +int x __asm("foo"); -void test(void) -{ - strerror(-1); +int *test(void) { + static int y __asm("bar"); + strerror(-1); + return &y; } +// LINUX: @bar = internal global i32 0 +// LINUX: @foo = common global i32 0 // LINUX: declare i8* @alias(i32) + +// DARWIN: @"\01bar" = internal global i32 0 +// DARWIN: @"\01foo" = common global i32 0 // DARWIN: declare i8* @"\01alias"(i32)