[clang] fd7300f - [Syntax] Test both the default and windows target platforms in unittests
Dmitri Gribenko via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 20 03:46:09 PDT 2020
Author: Marcel Hlopko
Date: 2020-03-20T11:42:18+01:00
New Revision: fd7300f717c18c861e77685efe6f16f12fb63ae7
URL: https://github.com/llvm/llvm-project/commit/fd7300f717c18c861e77685efe6f16f12fb63ae7
DIFF: https://github.com/llvm/llvm-project/commit/fd7300f717c18c861e77685efe6f16f12fb63ae7.diff
LOG: [Syntax] Test both the default and windows target platforms in unittests
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
Added:
Modified:
clang/unittests/Tooling/Syntax/TreeTest.cpp
Removed:
################################################################################
diff --git a/clang/unittests/Tooling/Syntax/TreeTest.cpp b/clang/unittests/Tooling/Syntax/TreeTest.cpp
index 17b1f2274537..fc9967f39911 100644
--- a/clang/unittests/Tooling/Syntax/TreeTest.cpp
+++ b/clang/unittests/Tooling/Syntax/TreeTest.cpp
@@ -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 {
@@ -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;
@@ -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
diff er in
+ // the default value.
+ // We are not passing -fdelayed-template-parsing directly but we are using
+ // the `-target` to improve coverage and discover
diff erences 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.
@@ -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) {
@@ -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);
@@ -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);
More information about the cfe-commits
mailing list