summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/VMCore
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-01-08 16:42:36 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-01-08 16:42:36 +0000
commit45e6c195d7f48a9507edb4888db2964f1cd928d7 (patch)
tree6dab29dabeeb61525493e149fd56fccfe1b53b7f /llvm/unittests/VMCore
parent80bd9af7c58bdc007583aa1af2caac5d77a8d123 (diff)
downloadbcm5719-llvm-45e6c195d7f48a9507edb4888db2964f1cd928d7.tar.gz
bcm5719-llvm-45e6c195d7f48a9507edb4888db2964f1cd928d7.zip
First step in fixing PR8927:
Add a unnamed_addr bit to global variables and functions. This will be used to indicate that the address is not significant and therefore the constant or function can be merged with others. If an optimization pass can show that an address is not used, it can set this. Examples of things that can have this set by the FE are globals created to hold string literals and C++ constructors. Adding unnamed_addr to a non-const global should have no effect unless an optimization can transform that global into a constant. Aliases are not allowed to have unnamed_addr since I couldn't figure out any use for it. llvm-svn: 123063
Diffstat (limited to 'llvm/unittests/VMCore')
-rw-r--r--llvm/unittests/VMCore/VerifierTest.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/unittests/VMCore/VerifierTest.cpp b/llvm/unittests/VMCore/VerifierTest.cpp
index 1173b2d18f7..55ce1444ed0 100644
--- a/llvm/unittests/VMCore/VerifierTest.cpp
+++ b/llvm/unittests/VMCore/VerifierTest.cpp
@@ -10,8 +10,11 @@
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Function.h"
+#include "llvm/GlobalAlias.h"
+#include "llvm/GlobalVariable.h"
#include "llvm/Instructions.h"
#include "llvm/LLVMContext.h"
+#include "llvm/Module.h"
#include "llvm/ADT/OwningPtr.h"
#include "llvm/Analysis/Verifier.h"
#include "gtest/gtest.h"
@@ -41,5 +44,22 @@ TEST(VerifierTest, Branch_i1) {
EXPECT_TRUE(verifyFunction(*F, ReturnStatusAction));
}
+TEST(VerifierTest, AliasUnnamedAddr) {
+ LLVMContext &C = getGlobalContext();
+ Module M("M", C);
+ const Type *Ty = Type::getInt8Ty(C);
+ Constant *Init = Constant::getNullValue(Ty);
+ GlobalVariable *Aliasee = new GlobalVariable(M, Ty, true,
+ GlobalValue::ExternalLinkage,
+ Init, "foo");
+ GlobalAlias *GA = new GlobalAlias(Type::getInt8PtrTy(C),
+ GlobalValue::ExternalLinkage,
+ "bar", Aliasee, &M);
+ GA->setUnnamedAddr(true);
+ std::string Error;
+ EXPECT_TRUE(verifyModule(M, ReturnStatusAction, &Error));
+ EXPECT_TRUE(StringRef(Error).startswith("Alias cannot have unnamed_addr"));
+}
+
}
}
OpenPOWER on IntegriCloud