From 95b192460ced9a80ff5aed88f35e086314d348ab Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Tue, 5 Oct 2004 17:45:39 +0000 Subject: [PATCH] Bug 75401: [Scanner][Parser] problem w/using va_arg macro --- .../tests/GCCCompleteParseExtensionsTest.java | 14 ++++++++++++++ .../core/parser/scanner2/GCCScannerExtension.java | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/GCCCompleteParseExtensionsTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/GCCCompleteParseExtensionsTest.java index 59e25beee67..bd1416b02ea 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/GCCCompleteParseExtensionsTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/GCCCompleteParseExtensionsTest.java @@ -208,4 +208,18 @@ public class GCCCompleteParseExtensionsTest extends CompleteParseBaseTest { writer.write( "else z = - y;\n" );//$NON-NLS-1$ writer.write( "z; }) zoot;\n" );//$NON-NLS-1$ } + + public void testBug75401() throws Exception + { + Writer writer = new StringWriter(); + writer.write( "#define va_arg __builtin_va_arg \n"); //$NON-NLS-1$ + writer.write( "#define va_list __builtin_va_list \n"); //$NON-NLS-1$ + writer.write( "void main( int argc, char** argv ) { \n"); //$NON-NLS-1$ + writer.write( " va_list v; \n"); //$NON-NLS-1$ + writer.write( " long l = va_arg( v, long ); \n"); //$NON-NLS-1$ + writer.write( "} \n"); //$NON-NLS-1$ + + parse( writer.toString() ); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerExtension.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerExtension.java index bfe5a1ad9ea..a98b4574e7a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerExtension.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/GCCScannerExtension.java @@ -90,6 +90,11 @@ public class GCCScannerExtension implements IScannerExtension { emptyCharArray, new char[][] { "arg".toCharArray() } ); //$NON-NLS-1$ + private static final FunctionStyleMacro __builtin_va_arg + = new FunctionStyleMacro( + "__builtin_va_arg".toCharArray(), //$NON-NLS-1$ + "*(type *)ap".toCharArray(), //$NON-NLS-1$ + new char[][] { "ap".toCharArray(), "type".toCharArray() } ); //$NON-NLS-1$//$NON-NLS-2$ /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.IScannerExtension#setupBuiltInMacros() */ @@ -109,6 +114,7 @@ public class GCCScannerExtension implements IScannerExtension { scannerData.getRealDefinitions().put(__complex__.name, __complex__ ); scannerData.getRealDefinitions().put(__imag__.name, __imag__ ); scannerData.getRealDefinitions().put(__real__.name, __real__ ); + scannerData.getRealDefinitions().put( __builtin_va_arg.name, __builtin_va_arg ); if( scannerData.getLanguage() == ParserLanguage.CPP ) scannerData.getRealDefinitions().put(__asm__.name, __asm__); else