From: Richard Trieu Date: Sat, 6 Jan 2018 03:20:59 +0000 (+0000) Subject: Test case for r321396 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9133db6030f8472d8c03c0446b2b7e0aa0a4691f;p=clang Test case for r321396 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 --- 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 index 0000000000..fa7c017228 --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/Module2/include.h @@ -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 index 0000000000..98cd1ef26f --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/Module2/not-include.h @@ -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 index 0000000000..f610e665e5 --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/Sub1/X.h @@ -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 index 0000000000..f41ddd639e --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/Sub1/Y.h @@ -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 index 0000000000..b6bdc140f9 --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/Sub1/Z.h @@ -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 index 0000000000..a65b370bea --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/Sub2/A.h @@ -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 index 0000000000..fa89f216b6 --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/Sub2/B.h @@ -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 index 0000000000..fe3a7116f9 --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/class.h @@ -0,0 +1,11 @@ +#ifndef Class +#define Class +template +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 index 0000000000..de75b2c92e --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/function.h @@ -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 index 0000000000..ac7fc43cae --- /dev/null +++ b/test/Modules/Inputs/odr_hash-Unresolved/module.modulemap @@ -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 index 0000000000..0c73b50f70 --- /dev/null +++ b/test/Modules/odr_hash-Unresolved.cpp @@ -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"