C++: Transfer noexcept specifier for refactoring actions

This applies for e.g.

* "Add Definition..." (on function decl)
* "Move Definition..." (on function decl)
* "Insert Virtual Functions of Base Class" (on class specifier)

Fixes: QTCREATORBUG-11849
Fixes: QTCREATORBUG-19699
Change-Id: I0d259bc1782470f3b3f19617230005a5594a5cca
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Nikolai Kosjar
2019-10-07 14:31:32 +02:00
parent c2aaa93408
commit 54fefd89b8
8 changed files with 49 additions and 2 deletions

View File

@@ -1232,7 +1232,7 @@ FullySpecifiedType Bind::trailingReturnType(TrailingReturnTypeAST *ast, const Fu
return type;
}
const StringLiteral *Bind::asStringLiteral(const ExpressionAST *ast)
const StringLiteral *Bind::asStringLiteral(const AST *ast)
{
CPP_ASSERT(ast, return nullptr);
const int firstToken = ast->firstToken();
@@ -3265,7 +3265,11 @@ bool Bind::visit(FunctionDeclaratorAST *ast)
Function::RvalueRefQualifier);
}
// propagate exception spec
this->exceptionSpecification(ast->exception_specification, type);
if (ExceptionSpecificationAST *spec = ast->exception_specification)
fun->setExceptionSpecification(asStringLiteral(spec));
if (ast->as_cpp_initializer != nullptr) {
fun->setAmbiguous(true);
/*ExpressionTy as_cpp_initializer =*/ this->expression(ast->as_cpp_initializer);