diff options
author | Anders Carlsson <andersca@mac.com> | 2009-03-15 18:44:04 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-03-15 18:44:04 +0000 |
commit | 94b15fbc3a10cdfb1639528a8a773b66a1e7cd9e (patch) | |
tree | 3a4a1934846d3c0270d5cd87b89891a47feb9396 /lib/Sema/SemaTemplateInstantiate.cpp | |
parent | a135fb43eb94524a6529768596a4533eed9aa70d (diff) |
Handle static_asserts when instantiating structs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67031 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaTemplateInstantiate.cpp')
-rw-r--r-- | lib/Sema/SemaTemplateInstantiate.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/Sema/SemaTemplateInstantiate.cpp b/lib/Sema/SemaTemplateInstantiate.cpp index 7b2d24b5bf..b7f0bbc923 100644 --- a/lib/Sema/SemaTemplateInstantiate.cpp +++ b/lib/Sema/SemaTemplateInstantiate.cpp @@ -1071,6 +1071,25 @@ Sema::InstantiateClassTemplateSpecialization( 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; } } |