spyffe updated this revision to Diff 110093.
spyffe added a comment.

Added a passing test for a global struct, so we have something that'll fail if 
the IR dumping breaks.


https://reviews.llvm.org/D36429

Files:
  test/Import/local-struct/Inputs/Callee.cpp
  test/Import/local-struct/test.cpp
  test/Import/struct-layout/Inputs/Callee.cpp
  test/Import/struct-layout/test.cpp
  tools/clang-import-test/clang-import-test.cpp

Index: tools/clang-import-test/clang-import-test.cpp
===================================================================
--- tools/clang-import-test/clang-import-test.cpp
+++ tools/clang-import-test/clang-import-test.cpp
@@ -27,6 +27,7 @@
 #include "clang/Parse/ParseAST.h"
 
 #include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/Host.h"
@@ -63,6 +64,10 @@
 DumpAST("dump-ast", llvm::cl::init(false),
         llvm::cl::desc("Dump combined AST"));
 
+static llvm::cl::opt<bool>
+DumpIR("dump-ir", llvm::cl::init(false),
+        llvm::cl::desc("Dump IR from final parse"));
+
 namespace init_convenience {
 class TestDiagnosticConsumer : public DiagnosticConsumer {
 private:
@@ -264,7 +269,7 @@
 llvm::Expected<std::unique_ptr<CompilerInstance>>
 Parse(const std::string &Path,
       llvm::ArrayRef<std::unique_ptr<CompilerInstance>> Imports,
-      bool ShouldDumpAST) {
+      bool ShouldDumpAST, bool ShouldDumpIR) {
   std::unique_ptr<CompilerInstance> CI =
       init_convenience::BuildCompilerInstance();
   auto ST = llvm::make_unique<SelectorTable>();
@@ -279,6 +284,7 @@
 
   auto LLVMCtx = llvm::make_unique<llvm::LLVMContext>();
   ASTConsumers.push_back(init_convenience::BuildCodeGen(*CI, *LLVMCtx));
+  auto &CG = *static_cast<CodeGenerator*>(ASTConsumers.back().get());
 
   if (ShouldDumpAST)
     ASTConsumers.push_back(CreateASTDumper("", true, false, false));
@@ -292,6 +298,9 @@
     return std::move(PE);
   }
   CI->getDiagnosticClient().EndSourceFile();
+  if (ShouldDumpIR) {
+    CG.GetModule()->print(llvm::outs(), nullptr);
+  }
   if (CI->getDiagnosticClient().getNumErrors()) {
     return llvm::make_error<llvm::StringError>(
         "Errors occured while parsing the expression.", std::error_code());
@@ -309,7 +318,7 @@
   std::vector<std::unique_ptr<CompilerInstance>> ImportCIs;
   for (auto I : Imports) {
     llvm::Expected<std::unique_ptr<CompilerInstance>> ImportCI =
-      Parse(I, {}, false);
+      Parse(I, {}, false, false);
     if (auto E = ImportCI.takeError()) {
       llvm::errs() << llvm::toString(std::move(E));
       exit(-1);
@@ -325,7 +334,7 @@
     }
   }
   llvm::Expected<std::unique_ptr<CompilerInstance>> ExpressionCI =
-      Parse(Expression, Direct ? ImportCIs : IndirectCIs, DumpAST);
+      Parse(Expression, Direct ? ImportCIs : IndirectCIs, DumpAST, DumpIR);
   if (auto E = ExpressionCI.takeError()) {
     llvm::errs() << llvm::toString(std::move(E));
     exit(-1);
Index: test/Import/struct-layout/test.cpp
===================================================================
--- test/Import/struct-layout/test.cpp
+++ test/Import/struct-layout/test.cpp
@@ -1,7 +1,6 @@
-// RUN: clang-import-test -dump-ast -import %S/Inputs/Hierarchy.cpp -expression %s | FileCheck %s
+// RUN: clang-import-test -dump-ir -import %S/Inputs/Callee.cpp -expression %s | FileCheck %s
+// CHECK: %struct.S = type { i32 }
 
-// CHECK: Overrides:{{.*}}Base::foo
-
 void foo() {
-  Derived d;
+  return Bar().bar(3);
 }
Index: test/Import/struct-layout/Inputs/Callee.cpp
===================================================================
--- test/Import/struct-layout/Inputs/Callee.cpp
+++ test/Import/struct-layout/Inputs/Callee.cpp
@@ -1,9 +1,9 @@
-class Base {
-public:
-  virtual void foo() {}
+struct S {
+  int a;
 };
 
-class Derived : public Base {
-public:
-  void foo() override {}
+struct Bar {
+  void bar(int _a) {
+    S s = { _a };
+  };
 };
Index: test/Import/local-struct/test.cpp
===================================================================
--- test/Import/local-struct/test.cpp
+++ test/Import/local-struct/test.cpp
@@ -1,7 +1,8 @@
-// RUN: clang-import-test -dump-ast -import %S/Inputs/Hierarchy.cpp -expression %s | FileCheck %s
+// RUN: clang-import-test -dump-ir -import %S/Inputs/Callee.cpp -expression %s | FileCheck %s
+// XFAIL: *
+// CHECK: %struct.S = type { i32 }
+// CHECK: %struct.S.0 = type { i8 }
 
-// CHECK: Overrides:{{.*}}Base::foo
-
 void foo() {
-  Derived d;
+  return Bar().bar(3, true);
 }
Index: test/Import/local-struct/Inputs/Callee.cpp
===================================================================
--- test/Import/local-struct/Inputs/Callee.cpp
+++ test/Import/local-struct/Inputs/Callee.cpp
@@ -1,9 +1,12 @@
-class Base {
-public:
-  virtual void foo() {}
+struct Bar {
+  void bar(int _a, bool _b) {
+    {
+      struct S { int a; };
+      S s = { _a };
+    }
+    {
+      struct S { bool b; };
+      S t = { _b };
+    }
+  };
 };
-
-class Derived : public Base {
-public:
-  void foo() override {}
-};
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to