diff options
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
| -rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 13 | 
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 6ff72ec045e62..1fd4e4cf8b8fe 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -4355,17 +4355,22 @@ void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) {    // Create a reference to the named value.  This ensures that it is emitted    // if a deferred decl.    llvm::Constant *Aliasee; -  if (isa<llvm::FunctionType>(DeclTy)) +  llvm::GlobalValue::LinkageTypes LT; +  if (isa<llvm::FunctionType>(DeclTy)) {      Aliasee = GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy, GD,                                        /*ForVTable=*/false); -  else +    LT = getFunctionLinkage(GD); +  } else {      Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),                                      llvm::PointerType::getUnqual(DeclTy),                                      /*D=*/nullptr); +    LT = getLLVMLinkageVarDefinition(cast<VarDecl>(GD.getDecl()), +                                     D->getType().isConstQualified()); +  }    // Create the new alias itself, but don't set a name yet. -  auto *GA = llvm::GlobalAlias::create( -      DeclTy, 0, llvm::Function::ExternalLinkage, "", Aliasee, &getModule()); +  auto *GA = +      llvm::GlobalAlias::create(DeclTy, 0, LT, "", Aliasee, &getModule());    if (Entry) {      if (GA->getAliasee() == Entry) {  | 
