mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-25 17:20:48 +00:00
Reject uses of unnamed_addr in declarations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123358 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -694,12 +694,14 @@ bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc,
|
||||
unsigned Visibility) {
|
||||
unsigned AddrSpace;
|
||||
bool ThreadLocal, IsConstant, UnnamedAddr;
|
||||
LocTy UnnamedAddrLoc;
|
||||
LocTy TyLoc;
|
||||
|
||||
PATypeHolder Ty(Type::getVoidTy(Context));
|
||||
if (ParseOptionalToken(lltok::kw_thread_local, ThreadLocal) ||
|
||||
ParseOptionalAddrSpace(AddrSpace) ||
|
||||
ParseOptionalToken(lltok::kw_unnamed_addr, UnnamedAddr) ||
|
||||
ParseOptionalToken(lltok::kw_unnamed_addr, UnnamedAddr,
|
||||
&UnnamedAddrLoc) ||
|
||||
ParseGlobalType(IsConstant) ||
|
||||
ParseType(Ty, TyLoc))
|
||||
return true;
|
||||
@@ -714,6 +716,9 @@ bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc,
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Init && UnnamedAddr)
|
||||
return Error(UnnamedAddrLoc, "only definitions can have unnamed_addr");
|
||||
|
||||
if (Ty->isFunctionTy() || Ty->isLabelTy())
|
||||
return Error(TyLoc, "invalid type for global variable");
|
||||
|
||||
@@ -2669,6 +2674,7 @@ bool LLParser::ParseFunctionHeader(Function *&Fn, bool isDefine) {
|
||||
|
||||
unsigned Visibility, RetAttrs;
|
||||
bool UnnamedAddr;
|
||||
LocTy UnnamedAddrLoc;
|
||||
CallingConv::ID CC;
|
||||
PATypeHolder RetType(Type::getVoidTy(Context));
|
||||
LocTy RetTypeLoc = Lex.getLoc();
|
||||
@@ -2676,10 +2682,14 @@ bool LLParser::ParseFunctionHeader(Function *&Fn, bool isDefine) {
|
||||
ParseOptionalVisibility(Visibility) ||
|
||||
ParseOptionalCallingConv(CC) ||
|
||||
ParseOptionalAttrs(RetAttrs, 1) ||
|
||||
ParseOptionalToken(lltok::kw_unnamed_addr, UnnamedAddr) ||
|
||||
ParseOptionalToken(lltok::kw_unnamed_addr, UnnamedAddr,
|
||||
&UnnamedAddrLoc) ||
|
||||
ParseType(RetType, RetTypeLoc, true /*void allowed*/))
|
||||
return true;
|
||||
|
||||
if (!isDefine && UnnamedAddr)
|
||||
return Error(UnnamedAddrLoc, "only definitions can have unnamed_addr");
|
||||
|
||||
// Verify that the linkage is ok.
|
||||
switch ((GlobalValue::LinkageTypes)Linkage) {
|
||||
case GlobalValue::ExternalLinkage:
|
||||
|
Reference in New Issue
Block a user