Adding couple of Block API, a bug fix and
a test change, all for blocks. wip.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118745 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index 790f883..8da3846 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -1911,16 +1911,18 @@
         Expr *E = new (Context) 
                     DeclRefExpr(const_cast<ValueDecl*>(BDRE->getDecl()), T,
                                           SourceLocation());
-      
-        ExprResult Res = PerformCopyInitialization(
+        if (T->getAs<RecordType>())
+          if (!T->isUnionType()) {
+            ExprResult Res = PerformCopyInitialization(
                           InitializedEntity::InitializeBlock(VD->getLocation(), 
                                                          T, false),
                                                          SourceLocation(),
                                                          Owned(E));
-        if (!Res.isInvalid()) {
-          Res = MaybeCreateCXXExprWithTemporaries(Res.get());
-          Expr *Init = Res.takeAs<Expr>();
-          BDRE->setCopyConstructorExpr(Init);
+            if (!Res.isInvalid()) {
+              Res = MaybeCreateCXXExprWithTemporaries(Res.get());
+              Expr *Init = Res.takeAs<Expr>();
+              BDRE->setCopyConstructorExpr(Init);
+            }
         }
       }
     }