diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp
index 3e8216e..b62b5fa 100644
--- a/Driver/RewriteObjC.cpp
+++ b/Driver/RewriteObjC.cpp
@@ -2123,8 +2123,9 @@
         // (struct objc_super) { <exprs from above> }
         InitListExpr *ILE = new InitListExpr(SourceLocation(), 
                                              &InitExprs[0], InitExprs.size(), 
-                                             SourceLocation());
-        SuperRep = new CompoundLiteralExpr(SourceLocation(), superType, ILE, false);
+                                             SourceLocation(), false);
+        SuperRep = new CompoundLiteralExpr(SourceLocation(), superType, ILE,
+                                           false);
       }
       // struct objc_super *
       Expr *Unop = new UnaryOperator(SuperRep, UnaryOperator::AddrOf,
@@ -2189,7 +2190,7 @@
         // (struct objc_super) { <exprs from above> }
         InitListExpr *ILE = new InitListExpr(SourceLocation(), 
                                              &InitExprs[0], InitExprs.size(), 
-                                             SourceLocation());
+                                             SourceLocation(), false);
         SuperRep = new CompoundLiteralExpr(SourceLocation(), superType, ILE, false);
       }
       // struct objc_super *
diff --git a/clang.xcodeproj/project.pbxproj b/clang.xcodeproj/project.pbxproj
index 71fddf5..407f193 100644
--- a/clang.xcodeproj/project.pbxproj
+++ b/clang.xcodeproj/project.pbxproj
@@ -900,7 +900,6 @@
 		DEAEECAE0A5AF0FA0045101B /* Driver */ = {
 			isa = PBXGroup;
 			children = (
-				35A057E60EAE2DDD0069249F /* CacheTokens.cpp */,
 				DE5932CD0AD60FF400BC794C /* clang.cpp */,
 				DE5932CE0AD60FF400BC794C /* clang.h */,
 				359DBBE20E1ACD4700F43FA0 /* AnalysisConsumer.h */,
@@ -908,6 +907,7 @@
 				352028460E2C16820096ADE0 /* Analyses.def */,
 				DE3985780CB8ADC800223765 /* ASTConsumers.h */,
 				DE39857A0CB8ADCB00223765 /* ASTConsumers.cpp */,
+				35A057E60EAE2DDD0069249F /* CacheTokens.cpp */,
 				DE38CF150D8C9DE000A273B6 /* DiagChecker.cpp */,
 				72D16C210D9975EA00E6DA4A /* HTMLPrint.cpp */,
 				DE5932CF0AD60FF400BC794C /* PrintParserCallbacks.cpp */,
diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h
index de4f4f7..e2db403 100644
--- a/include/clang/AST/Expr.h
+++ b/include/clang/AST/Expr.h
@@ -1410,11 +1410,17 @@
 class InitListExpr : public Expr {
   std::vector<Stmt *> InitExprs;
   SourceLocation LBraceLoc, RBraceLoc;
+  
+  /// HadDesignators - Return true if there were any designators in this
+  /// init list expr.  FIXME: this should be replaced by storing the designators
+  /// somehow and updating codegen.
+  bool HadDesignators;
 public:
   InitListExpr(SourceLocation lbraceloc, Expr **initexprs, unsigned numinits,
-               SourceLocation rbraceloc);
+               SourceLocation rbraceloc, bool HadDesignators);
   
   unsigned getNumInits() const { return InitExprs.size(); }
+  bool hadDesignators() const { return HadDesignators; }
   
   const Expr* getInit(unsigned Init) const { 
     assert(Init < getNumInits() && "Initializer access out of range!");
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index c20ca25..f18586f 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -204,13 +204,12 @@
 }
 
 InitListExpr::InitListExpr(SourceLocation lbraceloc, 
-                           Expr **initexprs, unsigned numinits,
-                           SourceLocation rbraceloc)
+                           Expr **initExprs, unsigned numInits,
+                           SourceLocation rbraceloc, bool hadDesignators)
   : Expr(InitListExprClass, QualType()),
-    LBraceLoc(lbraceloc), RBraceLoc(rbraceloc)
-{
-  for (unsigned i = 0; i != numinits; i++)
-    InitExprs.push_back(initexprs[i]);
+    LBraceLoc(lbraceloc), RBraceLoc(rbraceloc), HadDesignators(hadDesignators) {
+
+  InitExprs.insert(InitExprs.end(), initExprs, initExprs+numInits);
 }
 
 /// getFunctionType - Return the underlying function type for this block.
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index fee9456..5304fd9 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -22,6 +22,7 @@
 #include "clang/Basic/SourceManager.h"
 #include "clang/Basic/TargetInfo.h"
 #include "clang/Parse/DeclSpec.h"
+#include "clang/Parse/Designator.h"
 #include "clang/Parse/Scope.h"
 using namespace clang;
 
@@ -1260,7 +1261,8 @@
   // Semantic analysis for initializers is done by ActOnDeclarator() and
   // CheckInitializer() - it requires knowledge of the object being intialized. 
   
-  InitListExpr *E = new InitListExpr(LBraceLoc, InitList, NumInit, RBraceLoc);
+  InitListExpr *E = new InitListExpr(LBraceLoc, InitList, NumInit, RBraceLoc,
+                                     Designators.hasAnyDesignators());
   E->setType(Context.VoidTy); // FIXME: just a place holder for now.
   return E;
 }
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp
index 12ca382..0e627a1 100644
--- a/lib/Sema/SemaInit.cpp
+++ b/lib/Sema/SemaInit.cpp
@@ -87,7 +87,8 @@
   // Synthesize an "implicit" InitListExpr (marked by the invalid source locs).
   InitListExpr *ILE = new InitListExpr(SourceLocation(), 
                                        &InitExprs[0], InitExprs.size(), 
-                                       SourceLocation());
+                                       SourceLocation(),
+                                       ParentIList->hadDesignators());
   ILE->setType(T);
 
   // Modify the parent InitListExpr to point to the implicit InitListExpr.
