Revert following patches from L2.
80635
80626
80694
80407
80308
80296
80281
80108
80074
80062
79978

llvm-svn: 81136
diff --git a/llvm-gcc-4.2/gcc/ChangeLog.apple b/llvm-gcc-4.2/gcc/ChangeLog.apple
index a138a6c..4367950 100644
--- a/llvm-gcc-4.2/gcc/ChangeLog.apple
+++ b/llvm-gcc-4.2/gcc/ChangeLog.apple
@@ -1,9 +1,3 @@
-2009-08-31  Caroline Tice  <ctice@apple.com>
-
-	Radar 6419781
-	* tree.c (type_is_block_byref_struct):  New function.
-	* tree.h (type_is_block_byref_struct):  New extern function decl.
-
 2009-07-31  Bob Wilson  <bob.wilson@apple.com>
 	
 	Radar 7105099
diff --git a/llvm-gcc-4.2/gcc/llvm-debug.cpp b/llvm-gcc-4.2/gcc/llvm-debug.cpp
index 885b712..15e5d6a 100644
--- a/llvm-gcc-4.2/gcc/llvm-debug.cpp
+++ b/llvm-gcc-4.2/gcc/llvm-debug.cpp
@@ -272,7 +272,7 @@
   llvm::DIDescriptor D;
   if (!RegionStack.empty())
     D = RegionStack.back();
-  D = DebugFactory.CreateLexicalBlock(D);
+  D = DebugFactory.CreateBlock(D);
   RegionStack.push_back(D);
   DebugFactory.InsertRegionStart(D, CurBB);
 }
@@ -401,7 +401,6 @@
     break;
   }
   }
-
   return 
     DebugFactory.CreateBasicType(getOrCreateCompileUnit(main_input_filename),
                                  TypeName, 
@@ -445,20 +444,14 @@
                   TREE_CODE(type) == BLOCK_POINTER_TYPE) ?
     DW_TAG_pointer_type :
     DW_TAG_reference_type;
-  unsigned Flags = 0;
-  if (type_is_block_byref_struct(type))
-    Flags |= llvm::DIType::FlagBlockByrefStruct;
   expanded_location Loc = GetNodeLocation(type);
-
-  std::string PName;
-  FromTy.getName(PName);
-  return  DebugFactory.CreateDerivedType(Tag, findRegion(type), PName,
+  return  DebugFactory.CreateDerivedType(Tag, findRegion(type), "", 
                                          getOrCreateCompileUnit(NULL), 
                                          0 /*line no*/, 
                                          NodeSizeInBits(type),
                                          NodeAlignInBits(type),
                                          0 /*offset */, 
-                                         Flags, 
+                                         0 /* flags */, 
                                          FromTy);
 }
 
@@ -583,26 +576,13 @@
   // recursive) and replace all  uses of the forward declaration with the 
   // final definition. 
   expanded_location Loc = GetNodeLocation(TREE_CHAIN(type), false);
-  // FIXME: findRegion() is not able to find context all the time. This
-  // means when type names in different context match then FwdDecl is
-  // reused because MDNodes are uniqued. To avoid this, use type context
-  /// also while creating FwdDecl for now.
-  std::string FwdName;
-  if (TYPE_CONTEXT(type))
-    FwdName = GetNodeName(TYPE_CONTEXT(type));
-  FwdName = FwdName + GetNodeName(type);
-  unsigned Flags = llvm::DIType::FlagFwdDecl;
-  if (TYPE_BLOCK_IMPL_STRUCT(type))
-    Flags |= llvm::DIType::FlagAppleBlock;
-  if (type_is_block_byref_struct(type))
-    Flags |= llvm::DIType::FlagBlockByrefStruct;
   llvm::DICompositeType FwdDecl =
     DebugFactory.CreateCompositeType(Tag, 
                                      findRegion(type),
-                                     FwdName,
+                                     GetNodeName(type),
                                      getOrCreateCompileUnit(Loc.file), 
                                      Loc.line, 
-                                     0, 0, 0, Flags,
+                                     0, 0, 0, llvm::DIType::FlagFwdDecl,
                                      llvm::DIType(), llvm::DIArray(),
                                      RunTimeLang);
   
@@ -611,7 +591,7 @@
     return FwdDecl;
   
   // Insert into the TypeCache so that recursive uses will find it.
-  TypeCache[type] =  FwdDecl.getNode();
+  TypeCache[type] =  FwdDecl;
   
   // Convert all the elements.
   llvm::SmallVector<llvm::DIDescriptor, 16> EltTys;
@@ -622,6 +602,7 @@
       tree BInfoType = BINFO_TYPE (BInfo);
       DIType BaseClass = getOrCreateType(BInfoType);
       
+      expanded_location loc = GetNodeLocation(type);
       // FIXME : name, size, align etc...
       DIType DTy = 
         DebugFactory.CreateDerivedType(DW_TAG_inheritance, 
@@ -701,14 +682,14 @@
   
   llvm::DIArray Elements =
     DebugFactory.GetOrCreateArray(EltTys.data(), EltTys.size());
-
+  
   llvm::DICompositeType RealDecl =
     DebugFactory.CreateCompositeType(Tag, findRegion(type),
                                      GetNodeName(type),
                                      getOrCreateCompileUnit(Loc.file),
                                      Loc.line, 
                                      NodeSizeInBits(type), NodeAlignInBits(type),
-                                     0, Flags, llvm::DIType(), Elements,
+                                     0, 0, llvm::DIType(), Elements,
                                      RunTimeLang);
   
   // Now that we have a real decl for the struct, replace anything using the
@@ -721,14 +702,11 @@
 DIType DebugInfo::createVariantType(tree type, DIType MainTy) {
   
   DIType Ty;
-  if (tree TyDef = TYPE_NAME(type)) {
-      std::map<tree_node *, MDNode *>::iterator I = TypeCache.find(TyDef);
-      if (I != TypeCache.end())
-        return DIType(I->second);
-    if (TREE_CODE(TyDef) == TYPE_DECL &&  DECL_ORIGINAL_TYPE(TyDef)) {
-      expanded_location TypeDefLoc = GetNodeLocation(TyDef);
-      Ty = DebugFactory.CreateDerivedType(DW_TAG_typedef, findRegion(TyDef),
-                                          GetNodeName(TyDef), 
+  if (tree Name = TYPE_NAME(type)) {
+    if (TREE_CODE(Name) == TYPE_DECL &&  DECL_ORIGINAL_TYPE(Name)) {
+      expanded_location TypeDefLoc = GetNodeLocation(Name);
+      Ty = DebugFactory.CreateDerivedType(DW_TAG_typedef, findRegion(type),
+                                          GetNodeName(Name), 
                                           getOrCreateCompileUnit(TypeDefLoc.file),
                                           TypeDefLoc.line,
                                           0 /*size*/,
@@ -736,7 +714,8 @@
                                           0 /*offset */, 
                                           0 /*flags*/, 
                                           MainTy);
-      TypeCache[TyDef] = Ty.getNode();
+      // Set the slot early to prevent recursion difficulties.
+      TypeCache[type] = Ty;
       return Ty;
     }
   }
@@ -766,7 +745,7 @@
                                          MainTy);
   
   if (TYPE_VOLATILE(type) || TYPE_READONLY(type)) {
-    TypeCache[type] = Ty.getNode();
+    TypeCache[type] = Ty;
     return Ty;
   }
 
@@ -786,13 +765,17 @@
   if (TREE_CODE(type) == VOID_TYPE) return DIType();
   
   // Check to see if the compile unit already has created this type.
-  std::map<tree_node *, MDNode *>::iterator I = TypeCache.find(type);
-  if (I != TypeCache.end())
-    return DIType(I->second);
-
+  DIType &Slot = TypeCache[type];
+  if (!Slot.isNull())
+    return Slot;
+  
   DIType MainTy;
-  if (type != TYPE_MAIN_VARIANT(type) && TYPE_MAIN_VARIANT(type))
-    MainTy = getOrCreateType(TYPE_MAIN_VARIANT(type));
+  if (type != TYPE_MAIN_VARIANT(type)) {
+    if (TYPE_NEXT_VARIANT(type) && type != TYPE_NEXT_VARIANT(type))
+      MainTy = getOrCreateType(TYPE_NEXT_VARIANT(type));
+    else if (TYPE_MAIN_VARIANT(type))
+      MainTy = getOrCreateType(TYPE_MAIN_VARIANT(type));
+  }
 
   DIType Ty = createVariantType(type, MainTy);
   if (!Ty.isNull())
@@ -810,17 +793,10 @@
     
     case POINTER_TYPE:
     case REFERENCE_TYPE:
+    case BLOCK_POINTER_TYPE:
       Ty = createPointerType(type);
       break;
-
-    case BLOCK_POINTER_TYPE: {
-      DEBUGASSERT (generic_block_literal_struct_type && 
-                   "Generic struct type for Blocks is missing!");
-      tree tmp_type = build_pointer_type(generic_block_literal_struct_type);
-      Ty = createPointerType(tmp_type);
-      break;
-    }
-
+    
     case OFFSET_TYPE: {
       // gen_type_die(TYPE_OFFSET_BASETYPE(type), context_die);
       // gen_type_die(TREE_TYPE(type), context_die);
@@ -855,7 +831,7 @@
       Ty = createBasicType(type);
       break;
   }
-  TypeCache[type] = Ty.getNode();
+  TypeCache[type] = Ty;
   return Ty;
 }
 
@@ -881,7 +857,7 @@
                                                 bool isMain) {
   if (!FullPath)
     FullPath = main_input_filename;
-  MDNode *&CU = CUCache[FullPath];
+  GlobalVariable *&CU = CUCache[FullPath];
   if (CU)
     return DICompileUnit(CU);
 
@@ -929,7 +905,7 @@
                                                         version_string, isMain,
                                                         optimize, Flags,
                                                         ObjcRunTimeVer);
-  CU = NewCU.getNode();
+  CU = NewCU.getGV();
   return NewCU;
 }
 
diff --git a/llvm-gcc-4.2/gcc/llvm-debug.h b/llvm-gcc-4.2/gcc/llvm-debug.h
index 3368e28..7ff258e 100644
--- a/llvm-gcc-4.2/gcc/llvm-debug.h
+++ b/llvm-gcc-4.2/gcc/llvm-debug.h
@@ -59,8 +59,8 @@
   const char *PrevFullPath;             // Previous location file encountered.
   int PrevLineNo;                       // Previous location line# encountered.
   BasicBlock *PrevBB;                   // Last basic block encountered.
-  std::map<std::string, MDNode *> CUCache;
-  std::map<tree_node *, MDNode *> TypeCache;
+  std::map<std::string, GlobalVariable *> CUCache;
+  std::map<tree_node *, DIType> TypeCache;
                                         // Cache of previously constructed 
                                         // Types.
   std::vector<DIDescriptor> RegionStack;
diff --git a/llvm-gcc-4.2/gcc/tree.c b/llvm-gcc-4.2/gcc/tree.c
index d7c3034..fd212ed 100644
--- a/llvm-gcc-4.2/gcc/tree.c
+++ b/llvm-gcc-4.2/gcc/tree.c
@@ -7975,35 +7975,4 @@
 }
 /* APPLE LOCAL end weak_import on property 6676828 */
 
-/* LLVM LOCAL begin radar 6419781 */
-bool
-type_is_block_byref_struct (tree type)
-{
-  if (!type)
-    return false;
-
-  if (TREE_CODE (type) == POINTER_TYPE)
-    type = TREE_TYPE (type);
-
-  if (!type 
-      || ! TYPE_NAME (type)
-      || ! (TREE_CODE (type) == RECORD_TYPE))
-    return false;
-
-  if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
-      && strncmp (IDENTIFIER_POINTER (TYPE_NAME (type)),
-                  "__Block_byref_", 14) == 0)
-    return true;
-  else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
-           && DECL_NAME (TYPE_NAME (type))
-           && IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)))
-           && (strncmp 
-               (IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))),
-                "__Block_byref_", 14) == 0))
-    return true;
-  else
-    return false;
-}
-/* LLVM LOCAL begin end 6419781 */
-
 #include "gt-tree.h"
diff --git a/llvm-gcc-4.2/gcc/tree.h b/llvm-gcc-4.2/gcc/tree.h
index 92ac6dd..d34681c 100644
--- a/llvm-gcc-4.2/gcc/tree.h
+++ b/llvm-gcc-4.2/gcc/tree.h
@@ -4892,8 +4892,4 @@
 
 /* APPLE LOCAL end radar 6300081  */
 
-/* LLVM LOCAL begin radar 6419781 */
-extern bool type_is_block_byref_struct (tree);
-/* LLVM LOCAL end radar 6419781 */
-
 #endif  /* GCC_TREE_H  */