diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-08-17 21:23:17 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-08-17 21:23:17 +0000 |
commit | 82b4550fb25ad578b6c8143b87a003fae7106cae (patch) | |
tree | 9310d7cfa150600ad59b35643c4ce2c66e53416e | |
parent | 4b5e48d39eb94ee12f3d89df60525053d8b0275e (diff) |
Part of PR13618: visit the TypeLoc when RecursiveASTVisitor visits a CompoundLiteralExpr.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162133 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/RecursiveASTVisitor.h | 4 | ||||
-rw-r--r-- | unittests/Tooling/RecursiveASTVisitorTest.cpp | 8 | ||||
-rw-r--r-- | unittests/Tooling/TestVisitor.h | 8 |
3 files changed, 17 insertions, 3 deletions
diff --git a/include/clang/AST/RecursiveASTVisitor.h b/include/clang/AST/RecursiveASTVisitor.h index 2e56a486f3..60d7595706 100644 --- a/include/clang/AST/RecursiveASTVisitor.h +++ b/include/clang/AST/RecursiveASTVisitor.h @@ -2141,7 +2141,9 @@ DEF_TRAVERSE_STMT(BlockExpr, { return true; // no child statements to loop through. }) DEF_TRAVERSE_STMT(ChooseExpr, { }) -DEF_TRAVERSE_STMT(CompoundLiteralExpr, { }) +DEF_TRAVERSE_STMT(CompoundLiteralExpr, { + TRY_TO(TraverseTypeLoc(S->getTypeSourceInfo()->getTypeLoc())); +}) DEF_TRAVERSE_STMT(CXXBindTemporaryExpr, { }) DEF_TRAVERSE_STMT(CXXBoolLiteralExpr, { }) DEF_TRAVERSE_STMT(CXXDefaultArgExpr, { }) diff --git a/unittests/Tooling/RecursiveASTVisitorTest.cpp b/unittests/Tooling/RecursiveASTVisitorTest.cpp index 4b539067b1..1952c7b211 100644 --- a/unittests/Tooling/RecursiveASTVisitorTest.cpp +++ b/unittests/Tooling/RecursiveASTVisitorTest.cpp @@ -392,4 +392,12 @@ TEST(RecursiveASTVisitor, VisitsExtension) { "int s = __extension__ (s);\n")); } +TEST(RecursiveASTVisitor, VisitsCompoundLiteralType) { + TypeLocVisitor Visitor; + Visitor.ExpectMatch("struct S", 1, 26); + EXPECT_TRUE(Visitor.runOver( + "int f() { return (struct S { int a; }){.a = 0}.a; }", + TypeLocVisitor::Lang_C)); +} + } // end namespace clang diff --git a/unittests/Tooling/TestVisitor.h b/unittests/Tooling/TestVisitor.h index d439d81d89..63571d35ad 100644 --- a/unittests/Tooling/TestVisitor.h +++ b/unittests/Tooling/TestVisitor.h @@ -37,9 +37,13 @@ public: virtual ~TestVisitor() { } + enum Language { Lang_C, Lang_CXX }; + /// \brief Runs the current AST visitor over the given code. - bool runOver(StringRef Code) { - return tooling::runToolOnCode(CreateTestAction(), Code); + bool runOver(StringRef Code, Language L = Lang_CXX) { + // FIXME: The input language is determined based on the provided filename. + static const StringRef Filenames[] = { "input.c", "input.cc" }; + return tooling::runToolOnCode(CreateTestAction(), Code, Filenames[L]); } bool shouldVisitTemplateInstantiations() const { |