diff --git a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FailedCompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FailedCompleteParseASTTest.java index 59ab76c0656..38744ac9c6b 100644 --- a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FailedCompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FailedCompleteParseASTTest.java @@ -151,20 +151,6 @@ public class FailedCompleteParseASTTest extends CompleteParseBaseTest } // Iterator i = parse("typedef unsigned char byte; \n").getDeclarations();;//$NON-NLS-1$ // IASTTypedefDeclaration td = (IASTTypedefDeclaration) i.next(); -// assertFalse(i.hasNext()); - } - - public void testPredefinedSymbol_bug70928() throws Exception { - // GNU builtin storage class type __cdecl preceded by a custom return type - try { - parse("typedef int size_t; \n size_t __cdecl foo(); \n");//$NON-NLS-1$ - fail(); - } catch ( ParserException e ){ - assertTrue( e.getMessage().equals( "FAILURE" ) ); //$NON-NLS-1$ - } -// Iterator i = parse("typedef int size_t; \n int __cdecl foo(); \n").getDeclarations();//$NON-NLS-1$ -// IASTTypedefDeclaration td = (IASTTypedefDeclaration) i.next(); -// IASTFunction fd = (IASTFunction) i.next(); // assertFalse(i.hasNext()); } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java index 432ad466cf3..398524969b2 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java @@ -2075,4 +2075,13 @@ public class CompleteParseASTTest extends CompleteParseBaseTest assertTrue( i.next() instanceof IASTAbstractTypeSpecifierDeclaration ); assertFalse( i.hasNext() ); } + + public void testPredefinedSymbol_bug70928() throws Exception { + // GNU builtin storage class type __cdecl preceded by a custom return type + Iterator i = parse("typedef int size_t; \n int __cdecl foo(); \n").getDeclarations();//$NON-NLS-1$ + IASTTypedefDeclaration td = (IASTTypedefDeclaration) i.next(); + IASTFunction fd = (IASTFunction) i.next(); + assertFalse(i.hasNext()); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index c5bfba2469f..d7096a5c46e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -1887,9 +1887,8 @@ public class Scanner2 implements IScanner, IScannerData { if( buffer[ bufferPos[bufferStackPos] + 1] != '#' ){ --bufferPos[bufferStackPos]; return false; - } else { - ++bufferPos[ bufferStackPos ]; - } + } + ++bufferPos[ bufferStackPos ]; } break; } @@ -2472,6 +2471,8 @@ public class Scanner2 implements IScanner, IScannerData { = new ObjectStyleMacro("__const".toCharArray(), "const".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ private static final ObjectStyleMacro __signed__ = new ObjectStyleMacro("__signed__".toCharArray(), "signed".toCharArray()); //$NON-NLS-1$ //$NON-NLS-2$ + private static final ObjectStyleMacro __cdecl = new + ObjectStyleMacro( "__cdecl".toCharArray(), emptyCharArray ); //$NON-NLS-1$ private static final FunctionStyleMacro __attribute__ = new FunctionStyleMacro( @@ -2501,6 +2502,7 @@ public class Scanner2 implements IScanner, IScannerData { // gcc extensions definitions.put(__inline__.name, __inline__); + definitions.put(__cdecl.name, __cdecl ); definitions.put( __const__.name, __const__ ); definitions.put( __const.name, __const ); definitions.put(__extension__.name, __extension__);