Part of PR13618: visit the TypeLoc when RecursiveASTVisitor visits a CompoundLiteralExpr.

llvm-svn: 162133
This commit is contained in:
Richard Smith 2012-08-17 21:23:17 +00:00
parent 0731affaca
commit 87deab3e6c
3 changed files with 17 additions and 3 deletions

View File

@ -2141,7 +2141,9 @@ DEF_TRAVERSE_STMT(BlockExpr, {
return true; // no child statements to loop through. return true; // no child statements to loop through.
}) })
DEF_TRAVERSE_STMT(ChooseExpr, { }) 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(CXXBindTemporaryExpr, { })
DEF_TRAVERSE_STMT(CXXBoolLiteralExpr, { }) DEF_TRAVERSE_STMT(CXXBoolLiteralExpr, { })
DEF_TRAVERSE_STMT(CXXDefaultArgExpr, { }) DEF_TRAVERSE_STMT(CXXDefaultArgExpr, { })

View File

@ -392,4 +392,12 @@ TEST(RecursiveASTVisitor, VisitsExtension) {
"int s = __extension__ (s);\n")); "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 } // end namespace clang

View File

@ -37,9 +37,13 @@ public:
virtual ~TestVisitor() { } virtual ~TestVisitor() { }
enum Language { Lang_C, Lang_CXX };
/// \brief Runs the current AST visitor over the given code. /// \brief Runs the current AST visitor over the given code.
bool runOver(StringRef Code) { bool runOver(StringRef Code, Language L = Lang_CXX) {
return tooling::runToolOnCode(CreateTestAction(), Code); // 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 { bool shouldVisitTemplateInstantiations() const {