forked from OSchip/llvm-project
Part of PR13618: visit the TypeLoc when RecursiveASTVisitor visits a CompoundLiteralExpr.
llvm-svn: 162133
This commit is contained in:
parent
0731affaca
commit
87deab3e6c
|
@ -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, { })
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue