mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 09:46:02 +02:00
Bug 75401: [Scanner][Parser] problem w/using va_arg macro
This commit is contained in:
parent
40ae4797e1
commit
95b192460c
2 changed files with 20 additions and 0 deletions
|
@ -208,4 +208,18 @@ public class GCCCompleteParseExtensionsTest extends CompleteParseBaseTest {
|
||||||
writer.write( "else z = - y;\n" );//$NON-NLS-1$
|
writer.write( "else z = - y;\n" );//$NON-NLS-1$
|
||||||
writer.write( "z; }) zoot;\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() );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,6 +90,11 @@ public class GCCScannerExtension implements IScannerExtension {
|
||||||
emptyCharArray,
|
emptyCharArray,
|
||||||
new char[][] { "arg".toCharArray() } ); //$NON-NLS-1$
|
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)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.core.parser.IScannerExtension#setupBuiltInMacros()
|
* @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(__complex__.name, __complex__ );
|
||||||
scannerData.getRealDefinitions().put(__imag__.name, __imag__ );
|
scannerData.getRealDefinitions().put(__imag__.name, __imag__ );
|
||||||
scannerData.getRealDefinitions().put(__real__.name, __real__ );
|
scannerData.getRealDefinitions().put(__real__.name, __real__ );
|
||||||
|
scannerData.getRealDefinitions().put( __builtin_va_arg.name, __builtin_va_arg );
|
||||||
if( scannerData.getLanguage() == ParserLanguage.CPP )
|
if( scannerData.getLanguage() == ParserLanguage.CPP )
|
||||||
scannerData.getRealDefinitions().put(__asm__.name, __asm__);
|
scannerData.getRealDefinitions().put(__asm__.name, __asm__);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Reference in a new issue