diff --git a/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterDeclaratorTestSource.awts b/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterDeclaratorTestSource.awts index bb26697b63e..ed8fbcfe9e2 100644 --- a/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterDeclaratorTestSource.awts +++ b/core/org.eclipse.cdt.core.tests/resources/rewrite/ASTWriterDeclaratorTestSource.awts @@ -145,4 +145,29 @@ struct S virtual void memFun() final { } -}; \ No newline at end of file +}; + +//!Noexcept without expression specifiers +//%CPP +void foo() noexcept +{ +} + + +//!Noexcept with expression specifiers +//%CPP +void foo() noexcept (1 + 1) +{ +} + +//!Nested noexcept specifiers +//%CPP +void foo() noexcept (noexcept (1 + 1)) +{ +} + +//!Multiple nested noexcept specifiers +//%CPP +void foo() noexcept (noexcept (1 + 1) && noexcept (2 + 3)) +{ +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java index 62efcd956bf..1d75f4d6658 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ExpressionWriter.java @@ -71,6 +71,7 @@ public class ExpressionWriter extends NodeWriter{ private static final String OPEN_BRACKET_OP = "("; //$NON-NLS-1$ private static final String SIZEOF_OP = "sizeof "; //$NON-NLS-1$ private static final String SIZEOF_PARAMETER_PACK_OP = "sizeof..."; //$NON-NLS-1$ + private static final String NOEXCEPT_OP = "noexcept ("; //$NON-NLS-1$ private static final String NOT_OP = "!"; //$NON-NLS-1$ private static final String TILDE_OP = "~"; //$NON-NLS-1$ private static final String AMPERSAND_OP = "&"; //$NON-NLS-1$ @@ -253,6 +254,7 @@ public class ExpressionWriter extends NodeWriter{ case IASTUnaryExpression.op_bracketedPrimary: case ICPPASTUnaryExpression.op_throw: case ICPPASTUnaryExpression.op_typeid: + case ICPPASTUnaryExpression.op_noexcept: case IASTUnaryExpression.op_alignOf: case IASTUnaryExpression.op_labelReference: return true; @@ -269,6 +271,7 @@ public class ExpressionWriter extends NodeWriter{ case IASTUnaryExpression.op_postFixIncr: case IASTUnaryExpression.op_bracketedPrimary: case ICPPASTUnaryExpression.op_typeid: + case ICPPASTUnaryExpression.op_noexcept: case IASTUnaryExpression.op_alignOf: return true; @@ -306,6 +309,8 @@ public class ExpressionWriter extends NodeWriter{ return THROW; case ICPPASTUnaryExpression.op_typeid: return TYPEID_OP; + case ICPPASTUnaryExpression.op_noexcept: + return NOEXCEPT_OP; case IASTUnaryExpression.op_alignOf: return ALIGNOF_OP; case IASTUnaryExpression.op_labelReference: @@ -324,7 +329,7 @@ public class ExpressionWriter extends NodeWriter{ case IASTUnaryExpression.op_postFixIncr: return INCREMENT_OP; case ICPPASTUnaryExpression.op_typeid: - return CLOSING_BRACKET_OP; + case ICPPASTUnaryExpression.op_noexcept: case IASTUnaryExpression.op_bracketedPrimary: case IASTUnaryExpression.op_alignOf: return CLOSING_BRACKET_OP;