aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2008-10-17 21:56:50 +0000
committerDaniel Dunbar <daniel@zuster.org>2008-10-17 21:56:50 +0000
commit5fabf9dbee29464bcd06cd09f8e569d1b850f948 (patch)
tree591d650e9baa2d53f188097dfacf88a2443a2683 /lib/CodeGen
parenta1f23cc7f5dae8b71b8ee631994274609d35eb89 (diff)
Add option argument to GetAddrOfConstantString to use for name of
(first) global holding the string. - No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57736 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/CodeGenModule.cpp19
-rw-r--r--lib/CodeGen/CodeGenModule.h14
2 files changed, 23 insertions, 10 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index a8d8825aea..a1cd6f1e6c 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -885,14 +885,17 @@ CodeGenModule::GetAddrOfConstantStringFromLiteral(const StringLiteral *S) {
/// GenerateWritableString -- Creates storage for a string literal.
static llvm::Constant *GenerateStringLiteral(const std::string &str,
bool constant,
- CodeGenModule &CGM) {
+ CodeGenModule &CGM,
+ const char *GlobalName) {
// Create Constant for this string literal. Don't add a '\0'.
llvm::Constant *C = llvm::ConstantArray::get(str, false);
// Create a global variable for this string
C = new llvm::GlobalVariable(C->getType(), constant,
llvm::GlobalValue::InternalLinkage,
- C, ".str", &CGM.getModule());
+ C,
+ GlobalName ? GlobalName : ".str",
+ &CGM.getModule());
return C;
}
@@ -905,10 +908,11 @@ static llvm::Constant *GenerateStringLiteral(const std::string &str,
/// Feature.WriteableStrings.
///
/// The result has pointer to array type.
-llvm::Constant *CodeGenModule::GetAddrOfConstantString(const std::string &str) {
+llvm::Constant *CodeGenModule::GetAddrOfConstantString(const std::string &str,
+ const char *GlobalName) {
// Don't share any string literals if writable-strings is turned on.
if (Features.WritableStrings)
- return GenerateStringLiteral(str, false, *this);
+ return GenerateStringLiteral(str, false, *this, GlobalName);
llvm::StringMapEntry<llvm::Constant *> &Entry =
ConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]);
@@ -917,7 +921,7 @@ llvm::Constant *CodeGenModule::GetAddrOfConstantString(const std::string &str) {
return Entry.getValue();
// Create a global variable for this.
- llvm::Constant *C = GenerateStringLiteral(str, true, *this);
+ llvm::Constant *C = GenerateStringLiteral(str, true, *this, GlobalName);
Entry.setValue(C);
return C;
}
@@ -925,8 +929,9 @@ llvm::Constant *CodeGenModule::GetAddrOfConstantString(const std::string &str) {
/// GetAddrOfConstantCString - Returns a pointer to a character
/// array containing the literal and a terminating '\-'
/// character. The result has pointer to array type.
-llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &str) {
- return GetAddrOfConstantString(str + "\0");
+llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &str,
+ const char *GlobalName){
+ return GetAddrOfConstantString(str + "\0", GlobalName);
}
/// EmitObjCPropertyImplementations - Emit information for synthesized
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index 6a201be376..3f604dd048 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -179,12 +179,20 @@ public:
/// Feature.WriteableStrings.
///
/// The result has pointer to array type.
- llvm::Constant *GetAddrOfConstantString(const std::string& str);
+ ///
+ /// \param GlobalName If provided, the name to use for the global
+ /// (if one is created).
+ llvm::Constant *GetAddrOfConstantString(const std::string& str,
+ const char *GlobalName=0);
/// GetAddrOfConstantCString - Returns a pointer to a character
- /// array containing the literal and a terminating '\-'
+ /// array containing the literal and a terminating '\0'
/// character. The result has pointer to array type.
- llvm::Constant *GetAddrOfConstantCString(const std::string &str);
+ ///
+ /// \param GlobalName If provided, the name to use for the global
+ /// (if one is created).
+ llvm::Constant *GetAddrOfConstantCString(const std::string &str,
+ const char *GlobalName=0);
/// getBuiltinLibFunction - Given a builtin id for a function like
/// "__builtin_fabsf", return a Function* for "fabsf".