summaryrefslogtreecommitdiff
path: root/tests/manual/plain-cplusplus/main.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-08-26 10:31:15 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2010-08-26 10:31:15 +0200
commitd0f794b65e8b38598b533bc6041c131d75d866e0 (patch)
tree58e18a7b377aba3534a0e0c69d1b8f1962eeb359 /tests/manual/plain-cplusplus/main.cpp
parentc8bb37d275b14abe54973bad0526e2123aec0d34 (diff)
downloadqt-creator-d0f794b65e8b38598b533bc6041c131d75d866e0.tar.gz
Reduced the number of ambiguous ExpressionOrDeclarationStatementAST nodes.
Diffstat (limited to 'tests/manual/plain-cplusplus/main.cpp')
-rw-r--r--tests/manual/plain-cplusplus/main.cpp34
1 files changed, 33 insertions, 1 deletions
diff --git a/tests/manual/plain-cplusplus/main.cpp b/tests/manual/plain-cplusplus/main.cpp
index 156a46ba17..675ae41ce2 100644
--- a/tests/manual/plain-cplusplus/main.cpp
+++ b/tests/manual/plain-cplusplus/main.cpp
@@ -42,6 +42,33 @@ void parse(const char *fileName, const char *source, unsigned size);
int runWithSystemPreprocessor(int argc, char *argv[]);
int runWithNewPreprocessor(int argc, char *argv[]);
+struct V: public ASTVisitor
+{
+ V(TranslationUnit *unit)
+ : ASTVisitor(unit) {}
+
+ virtual bool visit(FunctionDeclaratorAST *ast)
+ {
+ if (ast->as_cpp_initializer) {
+ if (! (ast->symbol && ast->symbol->scope()))
+ ; //translationUnit()->warning(ast->firstToken(), "resolved as function declaration");
+ else if (ast->symbol->scope()->isNamespace() || ast->symbol->scope()->isTemplate())
+ ; //translationUnit()->warning(ast->firstToken(), "resolved as function declaration");
+ else if (ast->symbol->scope()->isBlock())
+ ; //translationUnit()->warning(ast->firstToken(), "resolved as C++ initializer");
+ else
+ translationUnit()->warning(ast->firstToken(), "ambiguous function declarator or C++ intializer");
+ }
+ return true;
+ }
+
+ virtual bool visit(ExpressionOrDeclarationStatementAST *ast)
+ {
+ translationUnit()->warning(ast->firstToken(), "ambiguous expression or declaration statement");
+ return true;
+ }
+};
+
int main(int argc, char *argv[])
{
if (getenv("CPLUSPLUS_WITH_NEW_PREPROCESSOR"))
@@ -53,7 +80,7 @@ int main(int argc, char *argv[])
int runWithSystemPreprocessor(int argc, char *argv[])
{
std::string cmdline;
- cmdline += "gcc -E -xc++ -U__BLOCKS__ -D__restrict= -D__extension__=";
+ cmdline += "gcc -E -xc++ -U__BLOCKS__ -D__restrict= -D__restrict__= -D__extension__= -D__imag__= -D__real__= -D__complex__= -D_Complex= -D__signed=signed";
for (int i = 1; i < argc; ++i) {
cmdline += ' ';
@@ -117,7 +144,12 @@ void parse(const char *fileName, const char *source, unsigned size)
unit.setSource(source, size);
unit.parse();
+#if 1
Namespace *globalNamespace = control.newNamespace(0);
Bind bind(&unit);
bind(unit.ast()->asTranslationUnit(), globalNamespace);
+
+ V v(&unit);
+ v.accept(unit.ast());
+#endif
}