diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 60e085f0ba6..b2229c87275 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -2069,24 +2069,19 @@ public class AST2CPPTests extends AST2BaseTest { assertTrue( r.getReturnValue() instanceof IASTCastExpression ); } - public void testBug86336() throws Exception { - StringBuffer buffer = new StringBuffer(); - buffer.append("struct T1 { \n"); //$NON-NLS-1$ - buffer.append(" T1 operator() ( int x ) { \n"); //$NON-NLS-1$ - buffer.append(" return T1(x); \n"); //$NON-NLS-1$ - buffer.append(" } \n"); //$NON-NLS-1$ - buffer.append(" T1( int ) {} \n"); //$NON-NLS-1$ - buffer.append("}; \n"); //$NON-NLS-1$ - - IASTTranslationUnit tu = parse(buffer.toString(), ParserLanguage.CPP); - CPPNameCollector col = new CPPNameCollector(); - tu.getVisitor().visitTranslationUnit(col); - - ICPPConstructor T1_ctor = (ICPPConstructor) col.getName(6).resolveBinding(); - ICPPClassType T1 = (ICPPClassType) col.getName(0).resolveBinding(); - - assertInstances( col, T1_ctor, 2 ); - assertInstances( col, T1, 2 ); + public void testBug84476() throws Exception + { + StringBuffer buffer = new StringBuffer(); +// buffer.append( "struct B { int f();};\n"); //$NON-NLS-1$ +// buffer.append( "int (B::*pb)() = &B::f; \n"); //$NON-NLS-1$ + buffer.append( "void foo() {\n"); //$NON-NLS-1$ + buffer.append( "struct B {\n"); //$NON-NLS-1$ + buffer.append( "int f();\n"); //$NON-NLS-1$ + buffer.append( "}; \n"); //$NON-NLS-1$ + buffer.append( "int (B::*pb)() = &B::f;\n"); //$NON-NLS-1$ + buffer.append( "}\n" ); //$NON-NLS-1$ + String code = buffer.toString(); + parse( code, ParserLanguage.CPP ); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java index 989314e53db..8a16c6c6055 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/token/BasicTokenDuple.java @@ -101,6 +101,11 @@ public class BasicTokenDuple implements ITokenDuple { for( ;; ){ if( token == last ) break; + if( startOfSegment == last.getNext() ) + { + startOfSegment = null; + break; + } prev = token; token = ( token != null ) ? token.getNext() : getFirstToken(); if( token.getType() == IToken.tLT ) @@ -112,8 +117,11 @@ public class BasicTokenDuple implements ITokenDuple { continue; } } - ITokenDuple d = TokenFactory.createTokenDuple( startOfSegment, last ); - r.add( d ); + if( startOfSegment != null ) + { + ITokenDuple d = TokenFactory.createTokenDuple( startOfSegment, last ); + r.add( d ); + } return (ITokenDuple[]) r.toArray( new ITokenDuple[ r.size() ]); }