Skip to content

Commit

Permalink
[Syntax] Test both the default and windows target platforms in unittests
Browse files Browse the repository at this point in the history
Summary:
This increases the coverage for things that differ between Linux and Windows, such as `-fdelayed-template-parsing`. This would have prevented the rollback of https://reviews.llvm.org/D76346.

While at it, update -std=c++11 to c++17 for the test.

Reviewers: gribozavr2

Reviewed By: gribozavr2

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D76433
  • Loading branch information
hlopko authored and gribozavr committed Mar 20, 2020
1 parent 089cfe1 commit fd7300f
Showing 1 changed file with 33 additions and 15 deletions.
48 changes: 33 additions & 15 deletions clang/unittests/Tooling/Syntax/TreeTest.cpp
Expand Up @@ -47,7 +47,7 @@ static llvm::ArrayRef<syntax::Token> tokens(syntax::Node *N) {
class SyntaxTreeTest : public ::testing::Test {
protected:
// Build a syntax tree for the code.
syntax::TranslationUnit *buildTree(llvm::StringRef Code) {
syntax::TranslationUnit *buildTree(llvm::StringRef Code, StringRef Target) {
// FIXME: this code is almost the identical to the one in TokensTest. Share
// it.
class BuildSyntaxTree : public ASTConsumer {
Expand Down Expand Up @@ -98,9 +98,9 @@ class SyntaxTreeTest : public ::testing::Test {
if (!Diags->getClient())
Diags->setClient(new IgnoringDiagConsumer);
// Prepare to run a compiler.
std::vector<const char *> Args = {"syntax-test", "-std=c++11",
"-fno-delayed-template-parsing",
"-fsyntax-only", FileName};
std::vector<const char *> Args = {"-target", Target.data(),
"-fsyntax-only", "-std=c++17",
"syntax-test", FileName};
Invocation = createInvocationFromCommandLine(Args, Diags, FS);
assert(Invocation);
Invocation->getFrontendOpts().DisableFree = false;
Expand All @@ -121,14 +121,29 @@ class SyntaxTreeTest : public ::testing::Test {
return Root;
}

void expectTreeDumpEqual(StringRef code, StringRef tree) {
SCOPED_TRACE(code);

auto *Root = buildTree(code);
std::string Expected = tree.trim().str();
std::string Actual =
std::string(llvm::StringRef(Root->dump(*Arena)).trim());
EXPECT_EQ(Expected, Actual) << "the resulting dump is:\n" << Actual;
void expectTreeDumpEqual(StringRef Code, StringRef Tree,
bool RunWithDelayedTemplateParsing = true) {
SCOPED_TRACE(Code);

std::string Expected = Tree.trim().str();

// We want to run the test with -fdelayed-template-parsing enabled and
// disabled, therefore we use these representative targets that differ in
// the default value.
// We are not passing -fdelayed-template-parsing directly but we are using
// the `-target` to improve coverage and discover differences in behavior
// early.
for (const StringRef Target :
{"x86_64-unknown-unknown", "x86_64-pc-win32"}) {
if (!RunWithDelayedTemplateParsing && Target.equals("x86_64-pc-win32")) {
continue;
}
auto *Root = buildTree(Code, Target);
std::string Actual = std::string(StringRef(Root->dump(*Arena)).trim());
EXPECT_EQ(Expected, Actual)
<< "for target " << Target << " the resulting dump is:\n"
<< Actual;
}
}

// Adds a file to the test VFS.
Expand Down Expand Up @@ -794,7 +809,10 @@ template <class T> int fun() {}
`-CompoundStatement
|-{
`-}
)txt");
)txt",
// FIXME: Make this test work on windows by generating the expected Syntax
// tree when -fdelayed-template-parsing is active.
/*RunWithDelayedTemplateParsing=*/true);
}

TEST_F(SyntaxTreeTest, NestedTemplates) {
Expand Down Expand Up @@ -1740,7 +1758,7 @@ TEST_F(SyntaxTreeTest, Mutations) {
auto CheckTransformation = [this](std::string Input, std::string Expected,
Transformation Transform) -> void {
llvm::Annotations Source(Input);
auto *Root = buildTree(Source.code());
auto *Root = buildTree(Source.code(), "x86_64-unknown-unknown");

Transform(Source, Root);

Expand Down Expand Up @@ -1778,7 +1796,7 @@ TEST_F(SyntaxTreeTest, Mutations) {
}

TEST_F(SyntaxTreeTest, SynthesizedNodes) {
buildTree("");
buildTree("", "x86_64-unknown-unknown");

auto *C = syntax::createPunctuation(*Arena, tok::comma);
ASSERT_NE(C, nullptr);
Expand Down

0 comments on commit fd7300f

Please sign in to comment.