diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 19 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CodeGenModule.h | 14 | 
2 files changed, 23 insertions, 10 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index a8d8825aea8..a1cd6f1e6ca 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/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/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index 6a201be3760..3f604dd048b 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/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".  | 

