diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2011-03-14 18:51:50 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2011-03-14 18:51:50 +0000 |
commit | 771f57de1c3eadade7bc62c045cc2357fba3679f (patch) | |
tree | 3ff58b6461663a0358c8ac8247ab5cc3ce0db491 /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | |
parent | 849385bf76f7c4c36150753efd999c37d22b33ee (diff) | |
download | bcm5719-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.cpp | 8 |
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 |