mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-06 17:26:01 +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( "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,
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue