Fix <rdar://problem/6765383> clang-6: clang does not appear to support declaring a static Block 'const'.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69306 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp
index 327fff0..8fd75f1 100644
--- a/lib/AST/ExprConstant.cpp
+++ b/lib/AST/ExprConstant.cpp
@@ -156,6 +156,7 @@
 
   APValue VisitParenExpr(ParenExpr *E) { return Visit(E->getSubExpr()); }
   APValue VisitDeclRefExpr(DeclRefExpr *E);
+  APValue VisitBlockExpr(BlockExpr *E);
   APValue VisitPredefinedExpr(PredefinedExpr *E) { return APValue(E, 0); }
   APValue VisitCompoundLiteralExpr(CompoundLiteralExpr *E);
   APValue VisitMemberExpr(MemberExpr *E);
@@ -184,6 +185,14 @@
   return APValue(E, 0); 
 }
 
+APValue LValueExprEvaluator::VisitBlockExpr(BlockExpr *E)
+{ 
+  if (E->hasBlockDeclRefExprs())
+    return APValue();
+    
+  return APValue(E, 0);
+}
+
 APValue LValueExprEvaluator::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
   if (E->isFileScope())
     return APValue(E, 0);
@@ -373,6 +382,7 @@
   }
 
   if (SubExpr->getType()->isFunctionType() ||
+      SubExpr->getType()->isBlockPointerType() ||
       SubExpr->getType()->isArrayType()) {
     APValue Result;
     if (EvaluateLValue(SubExpr, Result, Info))