Test case for r321396
authorRichard Trieu <rtrieu@google.com>
Sat, 6 Jan 2018 03:20:59 +0000 (03:20 +0000)
committerRichard Trieu <rtrieu@google.com>
Sat, 6 Jan 2018 03:20:59 +0000 (03:20 +0000)
Any hashing for methods should be able to compile this test case without
emitting an error.  Since the class and method come from the same header from
each module, there should be no messages about ODR violations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@321924 91177308-0d34-0410-b5e6-96231b3b80d8

test/Modules/Inputs/odr_hash-Unresolved/Module2/include.h [new file with mode: 0644]
test/Modules/Inputs/odr_hash-Unresolved/Module2/not-include.h [new file with mode: 0644]
test/Modules/Inputs/odr_hash-Unresolved/Sub1/X.h [new file with mode: 0644]
test/Modules/Inputs/odr_hash-Unresolved/Sub1/Y.h [new file with mode: 0644]
test/Modules/Inputs/odr_hash-Unresolved/Sub1/Z.h [new file with mode: 0644]
test/Modules/Inputs/odr_hash-Unresolved/Sub2/A.h [new file with mode: 0644]
test/Modules/Inputs/odr_hash-Unresolved/Sub2/B.h [new file with mode: 0644]
test/Modules/Inputs/odr_hash-Unresolved/class.h [new file with mode: 0644]
test/Modules/Inputs/odr_hash-Unresolved/function.h [new file with mode: 0644]
test/Modules/Inputs/odr_hash-Unresolved/module.modulemap [new file with mode: 0644]
test/Modules/odr_hash-Unresolved.cpp [new file with mode: 0644]

diff --git a/test/Modules/Inputs/odr_hash-Unresolved/Module2/include.h b/test/Modules/Inputs/odr_hash-Unresolved/Module2/include.h
new file mode 100644 (file)
index 0000000..fa7c017
--- /dev/null
@@ -0,0 +1,3 @@
+// include.h
+#include "Sub1/Z.h"
+
diff --git a/test/Modules/Inputs/odr_hash-Unresolved/Module2/not-include.h b/test/Modules/Inputs/odr_hash-Unresolved/Module2/not-include.h
new file mode 100644 (file)
index 0000000..98cd1ef
--- /dev/null
@@ -0,0 +1,5 @@
+// not-include.h
+
+#include "function.h"
+#include "class.h"
+
diff --git a/test/Modules/Inputs/odr_hash-Unresolved/Sub1/X.h b/test/Modules/Inputs/odr_hash-Unresolved/Sub1/X.h
new file mode 100644 (file)
index 0000000..f610e66
--- /dev/null
@@ -0,0 +1,3 @@
+// X.h
+#include "Sub1/Z.h"
+
diff --git a/test/Modules/Inputs/odr_hash-Unresolved/Sub1/Y.h b/test/Modules/Inputs/odr_hash-Unresolved/Sub1/Y.h
new file mode 100644 (file)
index 0000000..f41ddd6
--- /dev/null
@@ -0,0 +1,4 @@
+// Y.h
+#include "Sub1/Z.h"
+#include "class.h"
+
diff --git a/test/Modules/Inputs/odr_hash-Unresolved/Sub1/Z.h b/test/Modules/Inputs/odr_hash-Unresolved/Sub1/Z.h
new file mode 100644 (file)
index 0000000..b6bdc14
--- /dev/null
@@ -0,0 +1,4 @@
+// Z.h
+#include "Sub2/A.h"
+#include "Sub2/B.h"
+
diff --git a/test/Modules/Inputs/odr_hash-Unresolved/Sub2/A.h b/test/Modules/Inputs/odr_hash-Unresolved/Sub2/A.h
new file mode 100644 (file)
index 0000000..a65b370
--- /dev/null
@@ -0,0 +1,3 @@
+// A.h
+#include "function.h"
+
diff --git a/test/Modules/Inputs/odr_hash-Unresolved/Sub2/B.h b/test/Modules/Inputs/odr_hash-Unresolved/Sub2/B.h
new file mode 100644 (file)
index 0000000..fa89f21
--- /dev/null
@@ -0,0 +1,3 @@
+// B.h
+#include "function.h"
+
diff --git a/test/Modules/Inputs/odr_hash-Unresolved/class.h b/test/Modules/Inputs/odr_hash-Unresolved/class.h
new file mode 100644 (file)
index 0000000..fe3a711
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef Class
+#define Class
+template <class T>
+class S {
+  int Field;
+  void run() {
+    int x;
+    A::Check(&Field, 1);
+  }
+};
+#endif
diff --git a/test/Modules/Inputs/odr_hash-Unresolved/function.h b/test/Modules/Inputs/odr_hash-Unresolved/function.h
new file mode 100644 (file)
index 0000000..de75b2c
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef Function
+#define Function
+namespace A {
+static void Check(int*, int) {}
+}
+#endif
diff --git a/test/Modules/Inputs/odr_hash-Unresolved/module.modulemap b/test/Modules/Inputs/odr_hash-Unresolved/module.modulemap
new file mode 100644 (file)
index 0000000..ac7fc43
--- /dev/null
@@ -0,0 +1,21 @@
+module Module1 {
+  module Sub1 {
+    umbrella "Sub1"
+    module * { export * }
+  }
+
+  module Sub2 {
+    umbrella "Sub2"
+    module * { export * }
+  }
+}
+
+module Module2 {
+  umbrella "Module2"
+  module * { export * }
+}
+
+module Other {
+  textual header "function.h"
+  textual header "class.h"
+}
diff --git a/test/Modules/odr_hash-Unresolved.cpp b/test/Modules/odr_hash-Unresolved.cpp
new file mode 100644 (file)
index 0000000..0c73b50
--- /dev/null
@@ -0,0 +1,14 @@
+// RUN: rm -rf %t
+
+// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t/modules.cache \
+// RUN:  -I %S/Inputs/odr_hash-Unresolved \
+// RUN:  -fmodules \
+// RUN:  -fimplicit-module-maps \
+// RUN:  -fmodules-cache-path=%t/modules.cache \
+// RUN:  -fmodules-local-submodule-visibility \
+// RUN:  -std=c++11 -x c++ %s -fsyntax-only
+
+// Note: There is no -verify in the run line because some error messages are
+// not captured from the module building stage.
+
+#include "Module2/include.h"