1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fix bogus detection of knr-style function declarator, bug 221567.

This commit is contained in:
Markus Schorn 2008-05-28 08:56:59 +00:00
parent 508d3c6c86
commit c544d8f156
2 changed files with 32 additions and 1 deletions

View file

@ -4765,4 +4765,34 @@ public class AST2Tests extends AST2BaseTest {
parseAndCheckBindings(code, ParserLanguage.C, true);
parseAndCheckBindings(code, ParserLanguage.CPP, true);
}
// typedef void VOID;
// VOID func(VOID) {
// }
public void testTypedefVoid_Bug221567() throws Exception {
final boolean[] isCpps= {false, true};
String code= getAboveComment();
for (boolean isCpp : isCpps) {
BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), isCpp);
ITypedef td= ba.assertNonProblem("VOID;", 4, ITypedef.class);
IBinding ref= ba.assertNonProblem("VOID)", 4);
assertSame(td, ref);
IFunction func= ba.assertNonProblem("func", 4, IFunction.class);
IFunctionType ft= func.getType();
IType rt= ft.getReturnType();
IType[] pts= ft.getParameterTypes();
assertEquals(1, pts.length);
IType pt = pts[0];
assertInstance(rt, ITypedef.class);
assertInstance(pt, ITypedef.class);
rt= ((ITypedef)rt).getType();
pt= ((ITypedef)pt).getType();
assertTrue(rt instanceof IBasicType);
assertEquals(IBasicType.t_void, ((IBasicType)rt).getType());
assertTrue(pt instanceof IBasicType);
assertEquals(IBasicType.t_void, ((IBasicType)pt).getType());
}
}
}

View file

@ -2208,7 +2208,8 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser {
// if the next token is a tSEMI then the declaration was a regular
// declaration statement i.e. int f(type_def);
if (LT(1) == IToken.tSEMI) {
final int lt1= LT(1);
if (lt1 == IToken.tSEMI || lt1 == IToken.tLBRACE) {
backup(mark);
return 0;
}