1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +02:00

Bug 534813 - ASTWriter swaps noexcept and pure virtual specifier

Fix and test

Change-Id: I14088e69aed829940fb1e9f5197dedf18d9bb7a5
Signed-off-by: Hansruedi Patzen <hansruedi.patzen@hsr.ch>
Signed-off-by: Thomas Corbat <tcorbat@hsr.ch>
This commit is contained in:
Hansruedi Patzen 2018-05-17 14:34:38 +02:00 committed by Thomas Corbat
parent 7b53e75fb2
commit 5c5ce995f6
3 changed files with 32 additions and 4 deletions

View file

@ -1018,4 +1018,31 @@ public class ReplaceTests extends ChangeGeneratorTest {
}
});
}
//struct FooInterface
//{
// virtual void foo() throw (int);
//};
//struct FooInterface
//{
// virtual void foo() throw (int) = 0;
//};
public void testPureVirtualFunction() throws Exception {
compareResult(new ASTVisitor() {
{
shouldVisitDeclarators = true;
}
@Override
public int visit(IASTDeclarator declarator) {
if (declarator instanceof ICPPASTFunctionDeclarator) {
ICPPASTFunctionDeclarator newDeclarator = (ICPPASTFunctionDeclarator) declarator.copy(CopyStyle.withLocations);
newDeclarator.setPureVirtual(true);
addModification(null, ModificationKind.REPLACE, declarator, newDeclarator);
}
return PROCESS_ABORT;
}
});
}
}

View file

@ -56,6 +56,7 @@ class TestClass
int alpha;
TestClass(int a);
virtual void pure() = 0;
virtual void func() noexcept = 0;
};
TestClass::TestClass(int a)

View file

@ -170,10 +170,6 @@ public class DeclaratorWriter extends NodeWriter {
scribe.printSpace();
scribe.print(Keywords.MUTABLE);
}
writeVirtualSpecifiers(funcDec);
if (funcDec.isPureVirtual()) {
scribe.print(PURE_VIRTUAL);
}
writeExceptionSpecification(funcDec, funcDec.getExceptionSpecification(), funcDec.getNoexceptExpression());
writeAttributes(funcDec, EnumSet.of(SpaceLocation.BEFORE));
if (funcDec.getTrailingReturnType() != null) {
@ -182,6 +178,10 @@ public class DeclaratorWriter extends NodeWriter {
scribe.printSpace();
funcDec.getTrailingReturnType().accept(visitor);
}
writeVirtualSpecifiers(funcDec);
if (funcDec.isPureVirtual()) {
scribe.print(PURE_VIRTUAL);
}
}
public void writeVirtualSpecifiers(ICPPASTFunctionDeclarator funcDec) {