summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Basic/DiagnosticSemaKinds.td2
-rw-r--r--clang/lib/CodeGen/CGExprCXX.cpp3
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp39
-rw-r--r--clang/lib/CodeGen/CodeGenModule.h1
-rw-r--r--clang/lib/Sema/SemaDeclAttr.cpp7
-rw-r--r--clang/test/Sema/attr-alias-elf.c22
6 files changed, 3 insertions, 71 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 08240d1568c..415c4b29633 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -2015,8 +2015,6 @@ def err_attribute_weakref_without_alias : Error<
"weakref declaration of '%0' must also have an alias attribute">;
def err_alias_not_supported_on_darwin : Error <
"only weak aliases are supported on darwin">;
-def err_alias_to_undefined : Error<
- "alias must point to a defined variable or function">;
def warn_attribute_wrong_decl_type : Warning<
"%0 attribute only applies to %select{functions|unions|"
"variables and functions|functions and methods|parameters|"
diff --git a/clang/lib/CodeGen/CGExprCXX.cpp b/clang/lib/CodeGen/CGExprCXX.cpp
index 2311e084b72..567444253c9 100644
--- a/clang/lib/CodeGen/CGExprCXX.cpp
+++ b/clang/lib/CodeGen/CGExprCXX.cpp
@@ -929,8 +929,9 @@ static RValue EmitNewDeleteCall(CodeGenFunction &CGF,
/// to a replaceable global allocation function.
///
/// We model such elidable calls with the 'builtin' attribute.
+ llvm::Function *Fn = dyn_cast<llvm::Function>(CalleeAddr);
if (Callee->isReplaceableGlobalAllocationFunction() &&
- !Callee->hasAttr<AliasAttr>()) {
+ Fn && Fn->hasFnAttribute(llvm::Attribute::NoBuiltin)) {
// FIXME: Add addAttribute to CallSite.
if (llvm::CallInst *CI = dyn_cast<llvm::CallInst>(CallOrInvoke))
CI->addAttribute(llvm::AttributeSet::FunctionIndex,
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 2939b4a3d2c..96ae437ff46 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -37,7 +37,6 @@
#include "clang/Basic/TargetInfo.h"
#include "clang/Basic/Version.h"
#include "clang/Frontend/CodeGenOptions.h"
-#include "clang/Sema/SemaDiagnostic.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/Triple.h"
#include "llvm/IR/CallingConv.h"
@@ -934,12 +933,6 @@ void CodeGenModule::EmitDeferred() {
GlobalDecl D = DeferredDeclsToEmit.back();
DeferredDeclsToEmit.pop_back();
- const ValueDecl *Global = cast<ValueDecl>(D.getDecl());
- if (Global->hasAttr<AliasAttr>()) {
- EmitAliasDefinition(D);
- continue;
- }
-
// Check to see if we've already emitted this. This is necessary
// for a couple of reasons: first, decls can end up in the
// deferred-decls queue multiple times, and second, decls can end
@@ -1105,7 +1098,7 @@ void CodeGenModule::EmitGlobal(GlobalDecl GD) {
// If this is an alias definition (which otherwise looks like a declaration)
// emit it now.
if (Global->hasAttr<AliasAttr>())
- return scheduleAliasDefinitionEmission(GD);
+ return EmitAliasDefinition(GD);
// If this is CUDA, be selective about which declarations we emit.
if (LangOpts.CUDA) {
@@ -2082,24 +2075,6 @@ void CodeGenModule::EmitGlobalFunctionDefinition(GlobalDecl GD) {
AddGlobalAnnotations(D, Fn);
}
-void CodeGenModule::scheduleAliasDefinitionEmission(GlobalDecl GD) {
- const ValueDecl *D = cast<ValueDecl>(GD.getDecl());
- const AliasAttr *AA = D->getAttr<AliasAttr>();
- assert(AA && "Not an alias?");
-
- // Schedule it.
- DeferredDeclsToEmit.push_back(GD);
-
- llvm::Type *DeclTy = getTypes().ConvertTypeForMem(D->getType());
-
- // Cause the aliasee emission to be scheduled.
- if (isa<llvm::FunctionType>(DeclTy))
- GetOrCreateLLVMFunction(AA->getAliasee(), DeclTy, GD, /*ForVTable=*/false);
- else
- GetOrCreateLLVMGlobal(AA->getAliasee(),
- llvm::PointerType::getUnqual(DeclTy), 0);
-}
-
void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) {
const ValueDecl *D = cast<ValueDecl>(GD.getDecl());
const AliasAttr *AA = D->getAttr<AliasAttr>();
@@ -2125,18 +2100,6 @@ void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) {
Aliasee = GetOrCreateLLVMGlobal(AA->getAliasee(),
llvm::PointerType::getUnqual(DeclTy), 0);
- llvm::GlobalValue *GV = dyn_cast<llvm::GlobalValue>(Aliasee);
- if (!GV) {
- llvm::ConstantExpr *CE = cast<llvm::ConstantExpr>(Aliasee);
- assert(CE->getOpcode() == llvm::Instruction::BitCast ||
- CE->getOpcode() == llvm::Instruction::GetElementPtr);
- GV = cast<llvm::GlobalValue>(CE->getOperand(0));
- }
- if (GV->isDeclaration()) {
- getDiags().Report(AA->getLocation(), diag::err_alias_to_undefined);
- return;
- }
-
// Create the new alias itself, but don't set a name yet.
llvm::GlobalValue *GA =
new llvm::GlobalAlias(Aliasee->getType(),
diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h
index d2dc8358eaf..066009ca7df 100644
--- a/clang/lib/CodeGen/CodeGenModule.h
+++ b/clang/lib/CodeGen/CodeGenModule.h
@@ -1024,7 +1024,6 @@ private:
void EmitGlobalFunctionDefinition(GlobalDecl GD);
void EmitGlobalVarDefinition(const VarDecl *D);
- void scheduleAliasDefinitionEmission(GlobalDecl GD);
void EmitAliasDefinition(GlobalDecl GD);
void EmitObjCPropertyImplementations(const ObjCImplementationDecl *D);
void EmitObjCIvarInitializations(ObjCImplementationDecl *D);
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index a08abd9efcf..a71d3c0d7b5 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -5020,13 +5020,6 @@ void Sema::DeclApplyPragmaWeak(Scope *S, NamedDecl *ND, WeakInfo &W) {
W.setUsed(true);
if (W.getAlias()) { // clone decl, impersonate __attribute(weak,alias(...))
IdentifierInfo *NDId = ND->getIdentifier();
-
- // FIXME: we should reject this (pr17640).
- NamedDecl *Aliasee = LookupSingleName(TUScope, W.getAlias(),
- W.getLocation(), LookupOrdinaryName);
- if (Aliasee && Aliasee->hasAttr<AliasAttr>())
- return;
-
NamedDecl *NewD = DeclClonePragmaWeak(ND, W.getAlias(), W.getLocation());
NewD->addAttr(::new (Context) AliasAttr(W.getLocation(), Context,
NDId->getName()));
diff --git a/clang/test/Sema/attr-alias-elf.c b/clang/test/Sema/attr-alias-elf.c
deleted file mode 100644
index 32e41027c80..00000000000
--- a/clang/test/Sema/attr-alias-elf.c
+++ /dev/null
@@ -1,22 +0,0 @@
-// RUN: %clang_cc1 -triple x86_64-pc-linux -fsyntax-only -verify -emit-llvm-only %s
-
-void f1(void) __attribute__((alias("g1")));
-void g1(void) {
-}
-
-void f2(void) __attribute__((alias("g2"))); // expected-error {{alias must point to a defined variable or function}}
-
-
-void f3(void) __attribute__((alias("g3"))); // expected-error {{alias must point to a defined variable or function}}
-void g3(void);
-
-extern int a1 __attribute__((alias("b1")));
-int b1 = 42;
-
-extern int a2 __attribute__((alias("b2"))); // expected-error {{alias must point to a defined variable or function}}
-
-extern int a3 __attribute__((alias("b3"))); // expected-error {{alias must point to a defined variable or function}}
-extern int b3;
-
-extern int a4 __attribute__((alias("b4"))); // expected-error {{alias must point to a defined variable or function}}
-typedef int b4;
OpenPOWER on IntegriCloud