]> granicus.if.org Git - clang/commitdiff
Wrap up __NSConstantStringImpl (the replacement for __builtin___CFStringMakeConstantS...
authorSteve Naroff <snaroff@apple.com>
Tue, 18 Mar 2008 01:47:18 +0000 (01:47 +0000)
committerSteve Naroff <snaroff@apple.com>
Tue, 18 Mar 2008 01:47:18 +0000 (01:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48477 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/RewriteTest.cpp

index 927053e1629226dc220a5fe68c3ed350417c3eed..4f27ab900571e0a57a028424c9cb962b55f73b7b 100644 (file)
@@ -321,15 +321,12 @@ void RewriteTest::Initialize(ASTContext &context) {
   S += "#endif\n";
   S += "#ifndef __NSCONSTANTSTRINGIMPL\n";
   S += "struct __NSConstantStringImpl {\n";
-  S += "  struct objc_object *isa;\n";
+  S += "  int *isa;\n";
   S += "  int flags;\n";
   S += "  char *str;\n";
   S += "  long length;\n";
-  S += "  __NSConstantStringImpl(char *s, long l) :\n";
-  S += "  flags(0), str(s), length(l)\n";
-  S += "    { extern int __CFConstantStringClassReference[];\n";
-  S += "      isa = (struct objc_object *)__CFConstantStringClassReference;}\n";
   S += "};\n";
+  S += "extern int __CFConstantStringClassReference[];\n";
   S += "#define __NSCONSTANTSTRINGIMPL\n";
   S += "#endif\n";
 #if 0
@@ -1733,14 +1730,15 @@ Stmt *RewriteTest::RewriteObjCStringLiteral(ObjCStringLiteral *Exp) {
   S += utostr(NumObjCStringLiterals++);
 
   std::string StrObjDecl = "static __NSConstantStringImpl " + S;
-  StrObjDecl += " = __NSConstantStringImpl(";
+  StrObjDecl += " __attribute__ ((section (\"__DATA, __cfstring\"))) = {__CFConstantStringClassReference,";
+  StrObjDecl += "0x000007c8,"; // utf8_str
   // The pretty printer for StringLiteral handles escape characters properly.
   std::ostringstream prettyBuf;
   Exp->getString()->printPretty(prettyBuf);
   StrObjDecl += prettyBuf.str();
   StrObjDecl += ",";
   // The minus 2 removes the begin/end double quotes.
-  StrObjDecl += utostr(prettyBuf.str().size()-2) + ");\n";
+  StrObjDecl += utostr(prettyBuf.str().size()-2) + "};\n";
   InsertText(SourceLocation::getFileLoc(MainFileID, 0), 
              StrObjDecl.c_str(), StrObjDecl.size());