diff options
author | Eli Friedman <efriedma@quicinc.com> | 2020-05-18 20:38:13 -0700 |
---|---|---|
committer | Eli Friedman <efriedma@quicinc.com> | 2020-06-23 19:13:42 -0700 |
commit | a2caa3b61497b6be8c8b77823d0fd62b4be1f177 (patch) | |
tree | 9da9e17f80ffd8bb60a06eb2d7932c8a91611932 /llvm/lib/Object/IRSymtab.cpp | |
parent | f8bd6a75edac7560deb5fdcb31041b454dd9d7e0 (diff) | |
download | llvm-a2caa3b61497b6be8c8b77823d0fd62b4be1f177.zip llvm-a2caa3b61497b6be8c8b77823d0fd62b4be1f177.tar.gz llvm-a2caa3b61497b6be8c8b77823d0fd62b4be1f177.tar.bz2 |
Remove GlobalValue::getAlignment().
This function is deceptive at best: it doesn't return what you'd expect.
If you have an arbitrary GlobalValue and you want to determine the
alignment of that pointer, Value::getPointerAlignment() returns the
correct value. If you want the actual declared alignment of a function
or variable, GlobalObject::getAlignment() returns that.
This patch switches all the users of GlobalValue::getAlignment to an
appropriate alternative.
Differential Revision: https://reviews.llvm.org/D80368
Diffstat (limited to 'llvm/lib/Object/IRSymtab.cpp')
-rw-r--r-- | llvm/lib/Object/IRSymtab.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Object/IRSymtab.cpp b/llvm/lib/Object/IRSymtab.cpp index a92cb02..e39cb732 100644 --- a/llvm/lib/Object/IRSymtab.cpp +++ b/llvm/lib/Object/IRSymtab.cpp @@ -264,9 +264,13 @@ Error Builder::addSymbol(const ModuleSymbolTable &Msymtab, Sym.Flags |= unsigned(GV->getVisibility()) << storage::Symbol::FB_visibility; if (Flags & object::BasicSymbolRef::SF_Common) { + auto *GVar = dyn_cast<GlobalVariable>(GV); + if (!GVar) + return make_error<StringError>("Only variables can have common linkage!", + inconvertibleErrorCode()); Uncommon().CommonSize = GV->getParent()->getDataLayout().getTypeAllocSize( GV->getType()->getElementType()); - Uncommon().CommonAlign = GV->getAlignment(); + Uncommon().CommonAlign = GVar->getAlignment(); } const GlobalObject *Base = GV->getBaseObject(); |