Handle static_asserts when instantiating structs.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67031 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateInstantiate.cpp b/lib/Sema/SemaTemplateInstantiate.cpp
index 7b2d24b..b7f0bbc 100644
--- a/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/lib/Sema/SemaTemplateInstantiate.cpp
@@ -1071,6 +1071,25 @@
         if (New->isInvalidDecl())
           Invalid = true;
       }
+    } else if (StaticAssertDecl *SA = dyn_cast<StaticAssertDecl>(*Member)) {
+      Expr *AssertExpr = SA->getAssertExpr();
+      
+      OwningExprResult InstantiatedAssertExpr
+        = InstantiateExpr(AssertExpr, 
+                          ClassTemplateSpec->getTemplateArgs(),
+                          ClassTemplateSpec->getNumTemplateArgs());
+      if (!InstantiatedAssertExpr.isInvalid()) {
+        OwningExprResult Message = Clone(SA->getMessage());
+
+        Decl *New = 
+          (Decl *)ActOnStaticAssertDeclaration(SA->getLocation(), 
+                                               move(InstantiatedAssertExpr),
+                                               move(Message));
+        if (New->isInvalidDecl())
+          Invalid = true;
+          
+      } else
+        Invalid = true;
     }
   }