summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2011-03-14 18:51:50 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2011-03-14 18:51:50 +0000
commit771f57de1c3eadade7bc62c045cc2357fba3679f (patch)
tree3ff58b6461663a0358c8ac8247ab5cc3ce0db491 /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
parent849385bf76f7c4c36150753efd999c37d22b33ee (diff)
downloadbcm5719-llvm-771f57de1c3eadade7bc62c045cc2357fba3679f.tar.gz
bcm5719-llvm-771f57de1c3eadade7bc62c045cc2357fba3679f.zip
Implement instantiation of noexcept spec and add a test case.
llvm-svn: 127603
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiateDecl.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index 441149f374b..a2d1f871a2f 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -2161,14 +2161,20 @@ TemplateDeclInstantiator::InitFunctionInstantiation(FunctionDecl *New,
Exceptions.push_back(T);
}
+ Expr *NoexceptExpr = 0;
+ if (Expr *OldNoexceptExpr = Proto->getNoexceptExpr()) {
+ ExprResult E = SemaRef.SubstExpr(OldNoexceptExpr, TemplateArgs);
+ if (E.isUsable())
+ NoexceptExpr = E.take();
+ }
// Rebuild the function type
FunctionProtoType::ExtProtoInfo EPI = Proto->getExtProtoInfo();
- // FIXME: Handle noexcept
EPI.ExceptionSpecType = Proto->getExceptionSpecType();
EPI.NumExceptions = Exceptions.size();
EPI.Exceptions = Exceptions.data();
+ EPI.NoexceptExpr = NoexceptExpr;
EPI.ExtInfo = Proto->getExtInfo();
const FunctionProtoType *NewProto
OpenPOWER on IntegriCloud