diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-08-26 10:31:15 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-08-26 10:31:15 +0200 |
commit | d0f794b65e8b38598b533bc6041c131d75d866e0 (patch) | |
tree | 58e18a7b377aba3534a0e0c69d1b8f1962eeb359 /tests/manual/plain-cplusplus/main.cpp | |
parent | c8bb37d275b14abe54973bad0526e2123aec0d34 (diff) | |
download | qt-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.cpp | 34 |
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 } |