Fix the emission of expressions like char a[10] = "asdf"; previously, 
they were causing bad code to be emitted.  There are two fixes here: one 
makes sure we emit a string that is long enough, and one makes sure we 
properly handle string initialization in init lists.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51259 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp
index 6b68705..c7c250e 100644
--- a/lib/CodeGen/CGExprAgg.cpp
+++ b/lib/CodeGen/CGExprAgg.cpp
@@ -53,7 +53,7 @@
   void EmitAggregateClear(llvm::Value *DestPtr, QualType Ty);
 
   void EmitNonConstInit(InitListExpr *E);
-  
+
   //===--------------------------------------------------------------------===//
   //                            Visitor Methods
   //===--------------------------------------------------------------------===//
@@ -336,7 +336,6 @@
   }
 }
 
-
 void AggExprEmitter::VisitInitListExpr(InitListExpr *E) {
   if (E->isConstantExpr(CGF.getContext(), 0)) {
     // FIXME: call into const expr emitter so that we can emit
@@ -355,6 +354,14 @@
       cast<llvm::ArrayType>(APType->getElementType());
     
     uint64_t NumInitElements = E->getNumInits();
+
+    if (E->getNumInits() > 0 &&
+        E->getType().getCanonicalType().getUnqualifiedType() == 
+          E->getInit(0)->getType().getCanonicalType().getUnqualifiedType()) {
+      EmitAggLoadOfLValue(E->getInit(0));
+      return;
+    }
+
     uint64_t NumArrayElements = AType->getNumElements();
     QualType ElementType = E->getType()->getAsArrayType()->getElementType();