mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Patch for Craig Chaney <cchaney@us.ibm.com>
Fixed Bug 94365 - function-like macro with varargs requires one too many args Patch for Devin Steffler JUnit test case to protect against regression for 94365.
This commit is contained in:
parent
220206d7e9
commit
90f44f3db4
2 changed files with 23 additions and 3 deletions
|
@ -3112,4 +3112,18 @@ public class AST2Tests extends AST2BaseTest {
|
||||||
}
|
}
|
||||||
assertEquals( count, sum );
|
assertEquals( count, sum );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBug94365() throws Exception {
|
||||||
|
StringBuffer buffer = new StringBuffer();
|
||||||
|
buffer.append( "#define ONE(a, ...) int x\n"); //$NON-NLS-1$
|
||||||
|
buffer.append( "#define TWO(b, args...) int y\n"); //$NON-NLS-1$
|
||||||
|
buffer.append( "int main()\n"); //$NON-NLS-1$
|
||||||
|
buffer.append( "{\n"); //$NON-NLS-1$
|
||||||
|
buffer.append( "ONE(\"string\"); /* err */\n"); //$NON-NLS-1$
|
||||||
|
buffer.append( "TWO(\"string\"); /* err */\n"); //$NON-NLS-1$
|
||||||
|
buffer.append( "return 0; \n"); //$NON-NLS-1$
|
||||||
|
buffer.append( "}\n"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
parse( buffer.toString(), ParserLanguage.C );
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -3997,14 +3997,20 @@ abstract class BaseScanner implements IScanner {
|
||||||
argmap.put(arglist[currarg], arg);
|
argmap.put(arglist[currarg], arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
int numArgs = arglist.length;
|
int numRequiredArgs = arglist.length;
|
||||||
for (int i = 0; i < arglist.length; i++) {
|
for (int i = 0; i < arglist.length; i++) {
|
||||||
if (arglist[i] == null) {
|
if (arglist[i] == null) {
|
||||||
numArgs = i;
|
numRequiredArgs = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (argmap.size() < numArgs) {
|
|
||||||
|
/* Don't require a match for the vararg placeholder */
|
||||||
|
/* Workaround for bugzilla 94365 */
|
||||||
|
if (macro.hasGCCVarArgs()|| macro.hasVarArgs())
|
||||||
|
numRequiredArgs--;
|
||||||
|
|
||||||
|
if (argmap.size() < numRequiredArgs) {
|
||||||
handleProblem(IProblem.PREPROCESSOR_MACRO_USAGE_ERROR,
|
handleProblem(IProblem.PREPROCESSOR_MACRO_USAGE_ERROR,
|
||||||
bufferPos[bufferStackPos], macro.name);
|
bufferPos[bufferStackPos], macro.name);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue