[clang] eddede9 - [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 08:37:37 PDT 2020


Author: Marcel Hlopko
Date: 2020-03-20T16:33:58+01:00
New Revision: eddede9d5184a431c7f859ef1869f1a4de8d08d4

URL: https://github.com/llvm/llvm-project/commit/eddede9d5184a431c7f859ef1869f1a4de8d08d4
DIFF: https://github.com/llvm/llvm-project/commit/eddede9d5184a431c7f859ef1869f1a4de8d08d4.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/D76497

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..ddd9092d8a76 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 @@ 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 = {
+        "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 @@ 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 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) {


        


More information about the cfe-commits mailing list