mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-27 14:24:40 +00:00
Decouple dllexport/dllimport from linkage
Representing dllexport/dllimport as distinct linkage types prevents using these attributes on templates and inline functions. Instead of introducing further mixed linkage types to include linkonce and weak ODR, the old import/export linkage types are replaced with a new separate visibility-like specifier: define available_externally dllimport void @f() {} @Var = dllexport global i32 1, align 4 Linkage for dllexported globals and functions is now equal to their linkage without dllexport. Imported globals and functions must be either declarations with external linkage, or definitions with AvailableExternallyLinkage. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199218 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -421,16 +421,12 @@ void Verifier::visitGlobalValue(GlobalValue &GV) {
|
||||
Assert1(!GV.isDeclaration() ||
|
||||
GV.isMaterializable() ||
|
||||
GV.hasExternalLinkage() ||
|
||||
GV.hasDLLImportLinkage() ||
|
||||
GV.hasExternalWeakLinkage() ||
|
||||
(isa<GlobalAlias>(GV) &&
|
||||
(GV.hasLocalLinkage() || GV.hasWeakLinkage())),
|
||||
"Global is external, but doesn't have external or dllimport or weak linkage!",
|
||||
"Global is external, but doesn't have external or weak linkage!",
|
||||
&GV);
|
||||
|
||||
Assert1(!GV.hasDLLImportLinkage() || GV.isDeclaration(),
|
||||
"Global is marked as dllimport, but not external", &GV);
|
||||
|
||||
Assert1(!GV.hasAppendingLinkage() || isa<GlobalVariable>(GV),
|
||||
"Only global variables can have appending linkage!", &GV);
|
||||
|
||||
@ -456,8 +452,7 @@ void Verifier::visitGlobalVariable(GlobalVariable &GV) {
|
||||
&GV);
|
||||
}
|
||||
} else {
|
||||
Assert1(GV.hasExternalLinkage() || GV.hasDLLImportLinkage() ||
|
||||
GV.hasExternalWeakLinkage(),
|
||||
Assert1(GV.hasExternalLinkage() || GV.hasExternalWeakLinkage(),
|
||||
"invalid linkage type for global declaration", &GV);
|
||||
}
|
||||
|
||||
@ -502,6 +497,11 @@ void Verifier::visitGlobalVariable(GlobalVariable &GV) {
|
||||
}
|
||||
}
|
||||
|
||||
Assert1(!GV.hasDLLImportStorageClass() ||
|
||||
(GV.isDeclaration() && GV.hasExternalLinkage()) ||
|
||||
GV.hasAvailableExternallyLinkage(),
|
||||
"Global is marked as dllimport, but not external", &GV);
|
||||
|
||||
if (!GV.hasInitializer()) {
|
||||
visitGlobalValue(GV);
|
||||
return;
|
||||
@ -1078,8 +1078,7 @@ void Verifier::visitFunction(Function &F) {
|
||||
if (F.isMaterializable()) {
|
||||
// Function has a body somewhere we can't see.
|
||||
} else if (F.isDeclaration()) {
|
||||
Assert1(F.hasExternalLinkage() || F.hasDLLImportLinkage() ||
|
||||
F.hasExternalWeakLinkage(),
|
||||
Assert1(F.hasExternalLinkage() || F.hasExternalWeakLinkage(),
|
||||
"invalid linkage type for function declaration", &F);
|
||||
} else {
|
||||
// Verify that this function (which has a body) is not named "llvm.*". It
|
||||
@ -1105,6 +1104,11 @@ void Verifier::visitFunction(Function &F) {
|
||||
if (F.hasAddressTaken(&U))
|
||||
Assert1(0, "Invalid user of intrinsic instruction!", U);
|
||||
}
|
||||
|
||||
Assert1(!F.hasDLLImportStorageClass() ||
|
||||
(F.isDeclaration() && F.hasExternalLinkage()) ||
|
||||
F.hasAvailableExternallyLinkage(),
|
||||
"Function is marked as dllimport, but not external.", &F);
|
||||
}
|
||||
|
||||
// verifyBasicBlock - Verify that a basic block is well formed...
|
||||
|
Reference in New Issue
Block a user