]> granicus.if.org Git - clang/commitdiff
Revert r149363 which was part a series of commits that were reverted in llvm
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 1 Feb 2012 06:36:49 +0000 (06:36 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 1 Feb 2012 06:36:49 +0000 (06:36 +0000)
commit 149470. This fixes test/CodeGen/PR3589-freestanding-libcalls.c.

Original log:

    ConstantArray::get() (for strings) is going away, use
    ConstantDataArray::getString instead.

    Many instances of ConstantArray::get() could be moved to
    use more efficient ConstantDataArray methods that avoid a ton
    of intermediate Constant*'s for each element (e.g.
    GetConstantArrayFromStringLiteral).  I don't plan on doing this
    in the short-term though.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149477 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprConstant.cpp
lib/CodeGen/CGObjCGNU.cpp
lib/CodeGen/CGObjCMac.cpp
lib/CodeGen/CGRTTI.cpp
lib/CodeGen/CodeGenAction.cpp
lib/CodeGen/CodeGenModule.cpp

index aa21bd37bdd9649306d433b5a0df9a3c296582aa..d95a37c584351479cc26adbe48f8964ca2c9571b 100644 (file)
@@ -811,7 +811,7 @@ public:
     // Resize the string to the right size, adding zeros at the end, or
     // truncating as needed.
     Str.resize(CAT->getSize().getZExtValue(), '\0');
-    return llvm::ConstantDataArray::getString(VMContext, Str, false);
+    return llvm::ConstantArray::get(VMContext, Str, false);
   }
 
   llvm::Constant *VisitUnaryExtension(const UnaryOperator *E) {
index 82c478d4feb2afbcc7a2676eb22f2d88905032b4..4911e0e29739995167214ee8dff06fcd31463aed 100644 (file)
@@ -186,7 +186,7 @@ protected:
     std::string name = prefix + Str;
     llvm::Constant *ConstStr = TheModule.getGlobalVariable(name);
     if (!ConstStr) {
-      llvm::Constant *value = llvm::ConstantDataArray::getString(VMContext,Str);
+      llvm::Constant *value = llvm::ConstantArray::get(VMContext, Str, true);
       ConstStr = new llvm::GlobalVariable(TheModule, value->getType(), true,
               llvm::GlobalValue::LinkOnceODRLinkage, value, prefix + Str);
     }
index 3bc595ca441934e2623d0c0babd204de2253a83b..3152db2bec1be8345851e866508f201da25c259c 100644 (file)
@@ -3719,8 +3719,8 @@ llvm::Constant *CGObjCCommonMac::GetClassName(IdentifierInfo *Ident) {
 
   if (!Entry)
     Entry = CreateMetadataVar("\01L_OBJC_CLASS_NAME_",
-                              llvm::ConstantDataArray::getString(VMContext,
-                                                         Ident->getNameStart()),
+                          llvm::ConstantArray::get(VMContext,
+                                                   Ident->getNameStart()),
                               ((ObjCABI == 2) ?
                                "__TEXT,__objc_classname,cstring_literals" :
                                "__TEXT,__cstring,cstring_literals"),
@@ -3928,7 +3928,7 @@ void CGObjCCommonMac::BuildAggrIvarLayout(const ObjCImplementationDecl *OI,
 /// the given argument BitMap string container. Routine reads
 /// two containers, IvarsInfo and SkipIvars which are assumed to be
 /// filled already by the caller.
-llvm::Constant *CGObjCCommonMac::BuildIvarLayoutBitmap(std::string &BitMap) {
+llvm::Constant *CGObjCCommonMac::BuildIvarLayoutBitmap(std::stringBitMap) {
   unsigned int WordsToScan, WordsToSkip;
   llvm::Type *PtrTy = llvm::Type::getInt8PtrTy(VMContext);
   
@@ -4045,7 +4045,7 @@ llvm::Constant *CGObjCCommonMac::BuildIvarLayoutBitmap(std::string &BitMap) {
   
   llvm::GlobalVariable * Entry =
   CreateMetadataVar("\01L_OBJC_CLASS_NAME_",
-                    llvm::ConstantDataArray::getString(VMContext, BitMap,false),
+                    llvm::ConstantArray::get(VMContext, BitMap.c_str()),
                     ((ObjCABI == 2) ?
                      "__TEXT,__objc_classname,cstring_literals" :
                      "__TEXT,__cstring,cstring_literals"),
@@ -4134,7 +4134,7 @@ llvm::Constant *CGObjCCommonMac::GetMethodVarName(Selector Sel) {
   // FIXME: Avoid std::string copying.
   if (!Entry)
     Entry = CreateMetadataVar("\01L_OBJC_METH_VAR_NAME_",
-               llvm::ConstantDataArray::getString(VMContext, Sel.getAsString()),
+                        llvm::ConstantArray::get(VMContext, Sel.getAsString()),
                               ((ObjCABI == 2) ?
                                "__TEXT,__objc_methname,cstring_literals" :
                                "__TEXT,__cstring,cstring_literals"),
@@ -4156,7 +4156,7 @@ llvm::Constant *CGObjCCommonMac::GetMethodVarType(const FieldDecl *Field) {
 
   if (!Entry)
     Entry = CreateMetadataVar("\01L_OBJC_METH_VAR_TYPE_",
-                         llvm::ConstantDataArray::getString(VMContext, TypeStr),
+                              llvm::ConstantArray::get(VMContext, TypeStr),
                               ((ObjCABI == 2) ?
                                "__TEXT,__objc_methtype,cstring_literals" :
                                "__TEXT,__cstring,cstring_literals"),
@@ -4177,7 +4177,7 @@ llvm::Constant *CGObjCCommonMac::GetMethodVarType(const ObjCMethodDecl *D,
 
   if (!Entry)
     Entry = CreateMetadataVar("\01L_OBJC_METH_VAR_TYPE_",
-                         llvm::ConstantDataArray::getString(VMContext, TypeStr),
+                              llvm::ConstantArray::get(VMContext, TypeStr),
                               ((ObjCABI == 2) ?
                                "__TEXT,__objc_methtype,cstring_literals" :
                                "__TEXT,__cstring,cstring_literals"),
@@ -4192,8 +4192,8 @@ llvm::Constant *CGObjCCommonMac::GetPropertyName(IdentifierInfo *Ident) {
 
   if (!Entry)
     Entry = CreateMetadataVar("\01L_OBJC_PROP_NAME_ATTR_",
-                        llvm::ConstantDataArray::getString(VMContext,
-                                                       Ident->getNameStart()),
+                          llvm::ConstantArray::get(VMContext,
+                                                   Ident->getNameStart()),
                               "__TEXT,__cstring,cstring_literals",
                               1, true);
 
index a5883f61d62b29eb807361c35ac7affd2fc883a1..120e711e840770c5da0ba96c641ce247b5feb11d 100644 (file)
@@ -125,8 +125,7 @@ RTTIBuilder::GetAddrOfTypeName(QualType Ty,
   // We know that the mangled name of the type starts at index 4 of the
   // mangled name of the typename, so we can just index into it in order to
   // get the mangled name of the type.
-  llvm::Constant *Init = llvm::ConstantDataArray::getString(VMContext,
-                                                            Name.substr(4));
+  llvm::Constant *Init = llvm::ConstantArray::get(VMContext, Name.substr(4));
 
   llvm::GlobalVariable *GV = 
     CGM.CreateOrReplaceCXXRuntimeVariable(Name, Init->getType(), Linkage);
index 2ac9a6fddfb346835720e552ff0232998c755bd4..eedfc57a10618d5b728af0834501cd880e20ed68 100644 (file)
@@ -220,15 +220,18 @@ void BackendConsumer::InlineAsmDiagHandler2(const llvm::SMDiagnostic &D,
                                             SourceLocation LocCookie) {
   // There are a couple of different kinds of errors we could get here.  First,
   // we re-format the SMDiagnostic in terms of a clang diagnostic.
+
+  // Strip "error: " off the start of the message string.
   StringRef Message = D.getMessage();
+  if (Message.startswith("error: "))
+    Message = Message.substr(7);
 
   // If the SMDiagnostic has an inline asm source location, translate it.
   FullSourceLoc Loc;
   if (D.getLoc() != SMLoc())
     Loc = ConvertBackendLocation(D, Context->getSourceManager());
-
-  // FIXME: Propagate ranges up as well.
   
+
   // If this problem has clang-level source location information, report the
   // issue as being an error in the source with a note showing the instantiated
   // code.
index 576209f36669a0bf8c074be606ae26bf40dc24a2..fc1c3be39a9eef148eb6b9902b7aa0444e5a70d6 100644 (file)
@@ -689,7 +689,7 @@ llvm::Constant *CodeGenModule::EmitAnnotationString(llvm::StringRef Str) {
     return i->second;
 
   // Not found yet, create a new global.
-  llvm::Constant *s = llvm::ConstantDataArray::getString(getLLVMContext(), Str);
+  llvm::Constant *s = llvm::ConstantArray::get(getLLVMContext(), Str, true);
   llvm::GlobalValue *gv = new llvm::GlobalVariable(getModule(), s->getType(),
     true, llvm::GlobalValue::PrivateLinkage, s, ".str");
   gv->setSection(AnnotationSection);
@@ -1853,8 +1853,7 @@ CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) {
     llvm::ConstantInt::get(Ty, 0x07C8);
 
   // String pointer.
-  llvm::Constant *C = llvm::ConstantDataArray::getString(VMContext,
-                                                         Entry.getKey());
+  llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str());
 
   llvm::GlobalValue::LinkageTypes Linkage;
   if (isUTF16)
@@ -1986,8 +1985,7 @@ CodeGenModule::GetAddrOfConstantString(const StringLiteral *Literal) {
   Fields[0] = ConstantStringClassRef;
   
   // String pointer.
-  llvm::Constant *C =
-    llvm::ConstantDataArray::getString(VMContext, Entry.getKey());
+  llvm::Constant *C = llvm::ConstantArray::get(VMContext, Entry.getKey().str());
   
   llvm::GlobalValue::LinkageTypes Linkage;
   bool isConstant;
@@ -2083,28 +2081,29 @@ CodeGenModule::GetConstantArrayFromStringLiteral(const StringLiteral *E) {
   // Don't emit it as the address of the string, emit the string data itself
   // as an inline array.
   if (E->getCharByteWidth()==1) {
-    return llvm::ConstantDataArray::getString(VMContext,
+    return llvm::ConstantArray::get(VMContext,
                                     GetStringForStringLiteral(E), false);
+  } else {
+    llvm::ArrayType *AType =
+      cast<llvm::ArrayType>(getTypes().ConvertType(E->getType()));
+    llvm::Type *ElemTy = AType->getElementType();
+    unsigned NumElements = AType->getNumElements();
+    std::vector<llvm::Constant*> Elts;
+    Elts.reserve(NumElements);
+    
+    for(unsigned i=0;i<E->getLength();++i) {
+      unsigned value = E->getCodeUnit(i);
+      llvm::Constant *C = llvm::ConstantInt::get(ElemTy,value,false);
+      Elts.push_back(C);
+    }
+    for(unsigned i=E->getLength();i<NumElements;++i) {
+      llvm::Constant *C = llvm::ConstantInt::get(ElemTy,0,false);
+      Elts.push_back(C);
+    }
+    
+    return llvm::ConstantArray::get(AType, Elts);
   }
-  
-  llvm::ArrayType *AType =
-    cast<llvm::ArrayType>(getTypes().ConvertType(E->getType()));
-  llvm::Type *ElemTy = AType->getElementType();
-  unsigned NumElements = AType->getNumElements();
-  std::vector<llvm::Constant*> Elts;
-  Elts.reserve(NumElements);
-  
-  for(unsigned i=0;i<E->getLength();++i) {
-    unsigned value = E->getCodeUnit(i);
-    llvm::Constant *C = llvm::ConstantInt::get(ElemTy,value,false);
-    Elts.push_back(C);
-  }
-  for(unsigned i=E->getLength();i<NumElements;++i) {
-    llvm::Constant *C = llvm::ConstantInt::get(ElemTy,0,false);
-    Elts.push_back(C);
-  }
-  
-  return llvm::ConstantArray::get(AType, Elts);
+
 }
 
 /// GetAddrOfConstantStringFromLiteral - Return a pointer to a
@@ -2153,7 +2152,7 @@ static llvm::GlobalVariable *GenerateStringLiteral(StringRef str,
                                              unsigned Alignment) {
   // Create Constant for this string literal. Don't add a '\0'.
   llvm::Constant *C =
-      llvm::ConstantDataArray::getString(CGM.getLLVMContext(), str, false);
+      llvm::ConstantArray::get(CGM.getLLVMContext(), str, false);
 
   // Create a global variable for this string
   llvm::GlobalVariable *GV =