Handle dependent types/exprs in static_assert expressions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66997 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 57a6c62..37035b9 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -2243,20 +2243,23 @@
   StringLiteral *AssertMessage = 
     cast<StringLiteral>((Expr *)assertmessageexpr.get());
 
-  llvm::APSInt Value(32);
-  if (!AssertExpr->isIntegerConstantExpr(Value, Context)) {
-    Diag(AssertLoc, diag::err_static_assert_expression_is_not_constant) <<
-      AssertExpr->getSourceRange();
-    return 0;
-  }
+  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent()) {
+    llvm::APSInt Value(32);
+    if (!AssertExpr->isIntegerConstantExpr(Value, Context)) {
+      Diag(AssertLoc, diag::err_static_assert_expression_is_not_constant) <<
+        AssertExpr->getSourceRange();
+      return 0;
+    }
 
+    if (Value == 0) {
+      std::string str(AssertMessage->getStrData(), 
+                      AssertMessage->getByteLength());
+      Diag(AssertLoc, diag::err_static_assert_failed) << str;
+    }
+  }
+  
   Decl *Decl = StaticAssertDecl::Create(Context, CurContext, AssertLoc, 
                                         AssertExpr, AssertMessage);
-  if (Value == 0) {
-    std::string str(AssertMessage->getStrData(), 
-                    AssertMessage->getByteLength());
-    Diag(AssertLoc, diag::err_static_assert_failed) << str;
-  }
   
   CurContext->addDecl(Decl);
   return Decl;