diff options
author | Lauro Ramos Venancio <lauro.venancio@gmail.com> | 2007-06-06 22:01:12 +0000 |
---|---|---|
committer | Lauro Ramos Venancio <lauro.venancio@gmail.com> | 2007-06-06 22:01:12 +0000 |
commit | 85703e3796dcf3530b00dcfda842322f050f4a08 (patch) | |
tree | 1946b5a1612e253553d7ac43122751437c1d3a9d /llvm/lib/Linker/LinkModules.cpp | |
parent | cb90f1d881fd58547ae52edadd3ab57d6ab25b90 (diff) | |
download | bcm5719-llvm-85703e3796dcf3530b00dcfda842322f050f4a08.tar.gz bcm5719-llvm-85703e3796dcf3530b00dcfda842322f050f4a08.zip |
Propagate alignment, section name and visibility when linking "appending
global values".
Fix noinline linkage.
llvm-svn: 37482
Diffstat (limited to 'llvm/lib/Linker/LinkModules.cpp')
-rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index cf9f777a53e..88bf62186fb 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -827,6 +827,18 @@ static bool LinkAppendingVars(Module *M, return Error(ErrorMsg, "Appending variables linked with different const'ness!"); + if (G1->getAlignment() != G2->getAlignment()) + return Error(ErrorMsg, + "Appending variables with different alignment need to be linked!"); + + if (G1->getVisibility() != G2->getVisibility()) + return Error(ErrorMsg, + "Appending variables with different visibility need to be linked!"); + + if (G1->getSection() != G2->getSection()) + return Error(ErrorMsg, + "Appending variables with different section name need to be linked!"); + unsigned NewSize = T1->getNumElements() + T2->getNumElements(); ArrayType *NewType = ArrayType::get(T1->getElementType(), NewSize); @@ -837,6 +849,9 @@ static bool LinkAppendingVars(Module *M, new GlobalVariable(NewType, G1->isConstant(), G1->getLinkage(), /*init*/0, First->first, M, G1->isThreadLocal()); + // Propagate alignment, visibility and section info. + CopyGVAttributes(NG, G1); + // Merge the initializer... Inits.reserve(NewSize); if (ConstantArray *I = dyn_cast<ConstantArray>(G1->getInitializer())) { |