CodeGen: allow __asm renaming on static local variables.
Fixes PR4777. llvm-svn: 145015
This commit is contained in:
parent
6ae03c3378
commit
ddbb2b85ab
|
@ -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<AsmLabelAttr>()) {
|
||||
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 =
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue