mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Testcases for bugs fixed by the preprocessor.
This commit is contained in:
parent
75b8d46572
commit
6fb8484d00
2 changed files with 98 additions and 0 deletions
|
@ -30,12 +30,14 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier;
|
import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement;
|
import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFieldReference;
|
import org.eclipse.cdt.core.dom.ast.IASTFieldReference;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTForStatement;
|
import org.eclipse.cdt.core.dom.ast.IASTForStatement;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression;
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionCallExpression;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator;
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTIdExpression;
|
import org.eclipse.cdt.core.dom.ast.IASTIdExpression;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTIfStatement;
|
import org.eclipse.cdt.core.dom.ast.IASTIfStatement;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTImageLocation;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTInitializer;
|
import org.eclipse.cdt.core.dom.ast.IASTInitializer;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression;
|
import org.eclipse.cdt.core.dom.ast.IASTInitializerExpression;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTInitializerList;
|
import org.eclipse.cdt.core.dom.ast.IASTInitializerList;
|
||||||
|
@ -67,6 +69,7 @@ import org.eclipse.cdt.core.dom.ast.IField;
|
||||||
import org.eclipse.cdt.core.dom.ast.IFunction;
|
import org.eclipse.cdt.core.dom.ast.IFunction;
|
||||||
import org.eclipse.cdt.core.dom.ast.IFunctionType;
|
import org.eclipse.cdt.core.dom.ast.IFunctionType;
|
||||||
import org.eclipse.cdt.core.dom.ast.ILabel;
|
import org.eclipse.cdt.core.dom.ast.ILabel;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IMacroBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.IParameter;
|
import org.eclipse.cdt.core.dom.ast.IParameter;
|
||||||
import org.eclipse.cdt.core.dom.ast.IPointerType;
|
import org.eclipse.cdt.core.dom.ast.IPointerType;
|
||||||
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
|
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
|
||||||
|
@ -3951,4 +3954,75 @@ public class AST2Tests extends AST2BaseTest {
|
||||||
assertInstance(col.getName(2).resolveBinding(), ICPPNamespace.class);
|
assertInstance(col.getName(2).resolveBinding(), ICPPNamespace.class);
|
||||||
assertInstance(col.getName(3).resolveBinding(), ICPPClassType.class);
|
assertInstance(col.getName(3).resolveBinding(), ICPPClassType.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #define WRAP(var) var
|
||||||
|
// #define MACRO 1
|
||||||
|
// int a= MACRO;
|
||||||
|
// int b= WRAP(MACRO);
|
||||||
|
public void testBug94673_refsForMacrosAsArguments() throws Exception {
|
||||||
|
StringBuffer buffer = getContents(1)[0];
|
||||||
|
IASTTranslationUnit tu= parseAndCheckBindings( buffer.toString(), ParserLanguage.CPP, true );
|
||||||
|
IASTPreprocessorMacroDefinition[] defs= tu.getMacroDefinitions();
|
||||||
|
assertEquals(2, defs.length);
|
||||||
|
IASTPreprocessorMacroDefinition md= defs[1];
|
||||||
|
assertEquals("MACRO", md.getName().toString());
|
||||||
|
IMacroBinding binding= (IMacroBinding) md.getName().resolveBinding();
|
||||||
|
assertNotNull(binding);
|
||||||
|
IASTName[] refs= tu.getReferences(binding);
|
||||||
|
assertEquals(2, refs.length);
|
||||||
|
IASTFileLocation loc= refs[1].getFileLocation();
|
||||||
|
final int idx = buffer.indexOf("WRAP(MACRO)");
|
||||||
|
assertEquals(idx, loc.getNodeOffset());
|
||||||
|
IASTImageLocation iloc= refs[1].getImageLocation();
|
||||||
|
assertEquals(idx+5, iloc.getNodeOffset());
|
||||||
|
}
|
||||||
|
|
||||||
|
// void OSi_Panic(const char *file, int line) {};
|
||||||
|
// void OSi_Panic(const char *file, int line, const char *fmt, ...) {};
|
||||||
|
//
|
||||||
|
// #define ASSERT(exp, args...)\
|
||||||
|
// {\
|
||||||
|
// if (!(exp))\
|
||||||
|
// {\
|
||||||
|
// OSi_Panic(__FILE__, __LINE__, ##args);\
|
||||||
|
// }\
|
||||||
|
// }\
|
||||||
|
//
|
||||||
|
// int main()
|
||||||
|
// {
|
||||||
|
// int a = 0;
|
||||||
|
// int b = 0;
|
||||||
|
// ASSERT(a > b, "Error: a=%d, b=%d", a, b);// marked with error
|
||||||
|
// ASSERT(a > b, "Error!");// marked with error also
|
||||||
|
// ASSERT(false);// fine
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void OSi_Panic(const char *file, int line) {};
|
||||||
|
// void OSi_Panic(const char *file, int line, const char *fmt, ...) {};
|
||||||
|
//
|
||||||
|
// #define ASSERT(exp, ...)\
|
||||||
|
// {\
|
||||||
|
// if (!(exp))\
|
||||||
|
// {\
|
||||||
|
// OSi_Panic(__FILE__, __LINE__, ##__VA_ARGS__);\
|
||||||
|
// }\
|
||||||
|
// }\
|
||||||
|
//
|
||||||
|
// int main()
|
||||||
|
// {
|
||||||
|
// int a = 0;
|
||||||
|
// int b = 0;
|
||||||
|
// ASSERT(a > b, "Error: a=%d, b=%d", a, b);// marked with error
|
||||||
|
// ASSERT(a > b, "Error!");// marked with error also
|
||||||
|
// ASSERT(false);// fine
|
||||||
|
// }
|
||||||
|
public void testBug188855_gccExtensionForVariadicMacros() throws Exception {
|
||||||
|
StringBuffer[] buffer = getContents(2);
|
||||||
|
final String content1 = buffer[0].toString();
|
||||||
|
final String content2 = buffer[1].toString();
|
||||||
|
parse( content1, ParserLanguage.CPP);
|
||||||
|
parse( content1, ParserLanguage.C);
|
||||||
|
parse( content2, ParserLanguage.CPP);
|
||||||
|
parse( content2, ParserLanguage.C);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ package org.eclipse.cdt.core.parser.tests.ast2;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTComment;
|
import org.eclipse.cdt.core.dom.ast.IASTComment;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
import org.eclipse.cdt.internal.core.parser.ParserException;
|
import org.eclipse.cdt.internal.core.parser.ParserException;
|
||||||
|
@ -226,4 +227,27 @@ public class CommentTests extends AST2BaseTest {
|
||||||
assertNotNull(comments[0].getFileLocation());
|
assertNotNull(comments[0].getFileLocation());
|
||||||
assertNotNull(comments[0].getNodeLocations());
|
assertNotNull(comments[0].getNodeLocations());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// // TODO: shows up in task list
|
||||||
|
// #include "somefile.h" // TODO: ignored
|
||||||
|
//
|
||||||
|
// #ifdef WHATEVA // TODO: ignored
|
||||||
|
// #endif // TODO: ignored
|
||||||
|
// // TODO: shows up in task list
|
||||||
|
|
||||||
|
public void testCommentInDirectives_bug192546() throws Exception {
|
||||||
|
StringBuffer code= getContents(1)[0];
|
||||||
|
IASTTranslationUnit tu = parse(code.toString(), ParserLanguage.CPP, false, false, true);
|
||||||
|
IASTComment[] comments = tu.getComments();
|
||||||
|
|
||||||
|
assertEquals(5, comments.length);
|
||||||
|
assertNotNull(comments[0].getFileLocation());
|
||||||
|
assertNotNull(comments[0].getNodeLocations());
|
||||||
|
for (int i = 0; i < comments.length; i++) {
|
||||||
|
IASTComment comment = comments[i];
|
||||||
|
IASTFileLocation loc= comment.getFileLocation();
|
||||||
|
int idx= loc.getNodeOffset() + comment.getRawSignature().indexOf("TODO");
|
||||||
|
assertEquals("TODO", code.substring(idx, idx+4));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue