diff options
author | Marcel Hlopko <hlopko@google.com> | 2020-03-20 16:28:53 +0100 |
---|---|---|
committer | Dmitri Gribenko <gribozavr@gmail.com> | 2020-03-20 16:33:58 +0100 |
commit | eddede9d5184a431c7f859ef1869f1a4de8d08d4 (patch) | |
tree | 3f599ee3ddda34b978cb47917c47895eb5f2658b /clang/unittests/Tooling/Syntax/TreeTest.cpp | |
parent | 94061df6e5f24c2f25ad7c55af13dd17cccc5856 (diff) | |
download | llvm-eddede9d5184a431c7f859ef1869f1a4de8d08d4.zip llvm-eddede9d5184a431c7f859ef1869f1a4de8d08d4.tar.gz llvm-eddede9d5184a431c7f859ef1869f1a4de8d08d4.tar.bz2 |
[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/D76497
Diffstat (limited to 'clang/unittests/Tooling/Syntax/TreeTest.cpp')
-rw-r--r-- | clang/unittests/Tooling/Syntax/TreeTest.cpp | 48 |
1 files changed, 35 insertions, 13 deletions
diff --git a/clang/unittests/Tooling/Syntax/TreeTest.cpp b/clang/unittests/Tooling/Syntax/TreeTest.cpp index 17b1f22..ddd9092 100644 --- a/clang/unittests/Tooling/Syntax/TreeTest.cpp +++ b/clang/unittests/Tooling/Syntax/TreeTest.cpp @@ -47,7 +47,9 @@ 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, + const std::string &Target = "x86_64-pc-linux-gnu") { // FIXME: this code is almost the identical to the one in TokensTest. Share // it. class BuildSyntaxTree : public ASTConsumer { @@ -98,9 +100,10 @@ protected: 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 = { + "syntax-test", "-target", Target.c_str(), + FileName, "-fsyntax-only", "-std=c++17", + }; Invocation = createInvocationFromCommandLine(Args, Diags, FS); assert(Invocation); Invocation->getFrontendOpts().DisableFree = false; @@ -121,14 +124,30 @@ protected: 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 std::string Target : + {"x86_64-pc-linux-gnu", "x86_64-pc-win32-msvc"}) { + if (!RunWithDelayedTemplateParsing && + Target == "x86_64-pc-win32-msvc") { + 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 +813,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=*/false); } TEST_F(SyntaxTreeTest, NestedTemplates) { |