diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2015-05-27 18:47:56 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2015-05-27 18:47:56 +0000 |
| commit | 5e20cdd81c44a443562a09007668ffdf76c455af (patch) | |
| tree | dbbd4047878da71c1a706e26ce05b4e7791b14cc /test/Modules/Inputs | |
| parent | d5f23b0b7528b5c3caed1ba14f897cc4aaa9e3c3 (diff) | |
Notes
Diffstat (limited to 'test/Modules/Inputs')
162 files changed, 854 insertions, 9 deletions
diff --git a/test/Modules/Inputs/DependsOnModule.framework/module.map b/test/Modules/Inputs/DependsOnModule.framework/module.map index 5a1cacaad2a3..b62308583df4 100644 --- a/test/Modules/Inputs/DependsOnModule.framework/module.map +++ b/test/Modules/Inputs/DependsOnModule.framework/module.map @@ -16,6 +16,12 @@ framework module DependsOnModule { requires !objc header "not_objc.h" } + explicit module CustomReq1 { + requires custom_req1 + } + explicit module CustomReq2 { + requires custom_req2 + } explicit framework module SubFramework { umbrella header "SubFramework.h" diff --git a/test/Modules/Inputs/Module.framework/Headers/Module.h b/test/Modules/Inputs/Module.framework/Headers/Module.h index 3d2476b20431..7299823c81be 100644 --- a/test/Modules/Inputs/Module.framework/Headers/Module.h +++ b/test/Modules/Inputs/Module.framework/Headers/Module.h @@ -25,4 +25,13 @@ const char *getModuleVersion(void); __asm("foo"); +typedef struct __sFILE { + int _offset; +} FILE; + +extern FILE *myFile; + +#define SOME_MACRO_ATTR_GETTING_UNDEFINED __attribute__((objc_method_family(none))) +#undef SOME_MACRO_ATTR_GETTING_UNDEFINED + #endif // MODULE_H diff --git a/test/Modules/Inputs/ModuleMapLocations/Both_F.framework/Headers/a.h b/test/Modules/Inputs/ModuleMapLocations/Both_F.framework/Headers/a.h index 9dabfc089a15..aa47ef47c484 100644 --- a/test/Modules/Inputs/ModuleMapLocations/Both_F.framework/Headers/a.h +++ b/test/Modules/Inputs/ModuleMapLocations/Both_F.framework/Headers/a.h @@ -1 +1,2 @@ +@import Module; // Don't cause redefinition error. void will_be_found2(void); diff --git a/test/Modules/Inputs/PR21687/a.h b/test/Modules/Inputs/PR21687/a.h new file mode 100644 index 000000000000..023606eb35a7 --- /dev/null +++ b/test/Modules/Inputs/PR21687/a.h @@ -0,0 +1 @@ +struct X { X(); virtual ~X(); }; diff --git a/test/Modules/Inputs/PR21687/b.h b/test/Modules/Inputs/PR21687/b.h new file mode 100644 index 000000000000..7085b1f67391 --- /dev/null +++ b/test/Modules/Inputs/PR21687/b.h @@ -0,0 +1,2 @@ +#include "a.h" +X *n = new X; diff --git a/test/Modules/Inputs/PR21687/c.h b/test/Modules/Inputs/PR21687/c.h new file mode 100644 index 000000000000..5c5d555a3f07 --- /dev/null +++ b/test/Modules/Inputs/PR21687/c.h @@ -0,0 +1,4 @@ +#include "a.h" +inline void f() { X x, y(x); } +#include "b.h" +X x, y(x); diff --git a/test/Modules/Inputs/PR21687/module.modulemap b/test/Modules/Inputs/PR21687/module.modulemap new file mode 100644 index 000000000000..77e0a89e39a0 --- /dev/null +++ b/test/Modules/Inputs/PR21687/module.modulemap @@ -0,0 +1,3 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } +module c { header "c.h" export * } diff --git a/test/Modules/Inputs/anon-namespace/a.h b/test/Modules/Inputs/anon-namespace/a.h new file mode 100644 index 000000000000..fe71f4004e4a --- /dev/null +++ b/test/Modules/Inputs/anon-namespace/a.h @@ -0,0 +1 @@ +namespace N {} diff --git a/test/Modules/Inputs/anon-namespace/b1.h b/test/Modules/Inputs/anon-namespace/b1.h new file mode 100644 index 000000000000..480e8e46a95e --- /dev/null +++ b/test/Modules/Inputs/anon-namespace/b1.h @@ -0,0 +1,2 @@ +namespace N {} +namespace N { namespace {} } diff --git a/test/Modules/Inputs/anon-namespace/b2.h b/test/Modules/Inputs/anon-namespace/b2.h new file mode 100644 index 000000000000..8e7535f3626d --- /dev/null +++ b/test/Modules/Inputs/anon-namespace/b2.h @@ -0,0 +1,2 @@ +#include "a.h" +namespace N {} diff --git a/test/Modules/Inputs/anon-namespace/c.h b/test/Modules/Inputs/anon-namespace/c.h new file mode 100644 index 000000000000..fe71f4004e4a --- /dev/null +++ b/test/Modules/Inputs/anon-namespace/c.h @@ -0,0 +1 @@ +namespace N {} diff --git a/test/Modules/Inputs/anon-namespace/module.modulemap b/test/Modules/Inputs/anon-namespace/module.modulemap new file mode 100644 index 000000000000..3d390d2d4e71 --- /dev/null +++ b/test/Modules/Inputs/anon-namespace/module.modulemap @@ -0,0 +1,3 @@ +module a { header "a.h" export * } +module b { module b1 { header "b1.h" export * } module b2 { header "b2.h" export * } } +module c { header "c.h" export * } diff --git a/test/Modules/Inputs/cxx-decls-imported.h b/test/Modules/Inputs/cxx-decls-imported.h index 8c1e74f17c3c..a4910fee753e 100644 --- a/test/Modules/Inputs/cxx-decls-imported.h +++ b/test/Modules/Inputs/cxx-decls-imported.h @@ -47,3 +47,6 @@ typedef decltype(name_for_linkage2_inner_a) NameForLinkage2Inner; namespace Aliased { extern int a; } namespace Alias = Aliased; + +struct InhCtorA { InhCtorA(int); }; +struct InhCtorB : InhCtorA { using InhCtorA::InhCtorA; }; diff --git a/test/Modules/Inputs/cxx-decls-merged.h b/test/Modules/Inputs/cxx-decls-merged.h index 86e81a9bb681..5eefb44992f2 100644 --- a/test/Modules/Inputs/cxx-decls-merged.h +++ b/test/Modules/Inputs/cxx-decls-merged.h @@ -25,3 +25,6 @@ typedef decltype(name_for_linkage2_inner_b) NameForLinkage2Inner; namespace Aliased { extern int b; } namespace Alias = Aliased; + +struct InhCtorA { InhCtorA(int); }; +struct InhCtorB : InhCtorA { using InhCtorA::InhCtorA; }; diff --git a/test/Modules/Inputs/cxx-dtor/a.h b/test/Modules/Inputs/cxx-dtor/a.h new file mode 100644 index 000000000000..023606eb35a7 --- /dev/null +++ b/test/Modules/Inputs/cxx-dtor/a.h @@ -0,0 +1 @@ +struct X { X(); virtual ~X(); }; diff --git a/test/Modules/Inputs/cxx-dtor/b.h b/test/Modules/Inputs/cxx-dtor/b.h new file mode 100644 index 000000000000..75958564cc9c --- /dev/null +++ b/test/Modules/Inputs/cxx-dtor/b.h @@ -0,0 +1,3 @@ +struct X { X(); virtual ~X(); }; +inline X::~X() {} +#include "a.h" diff --git a/test/Modules/Inputs/cxx-dtor/module.modulemap b/test/Modules/Inputs/cxx-dtor/module.modulemap new file mode 100644 index 000000000000..61578a1865aa --- /dev/null +++ b/test/Modules/Inputs/cxx-dtor/module.modulemap @@ -0,0 +1,2 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } diff --git a/test/Modules/Inputs/cxx-lookup/module.modulemap b/test/Modules/Inputs/cxx-lookup/module.modulemap index 6d397af250c8..385c8c9b6f82 100644 --- a/test/Modules/Inputs/cxx-lookup/module.modulemap +++ b/test/Modules/Inputs/cxx-lookup/module.modulemap @@ -6,3 +6,5 @@ module C { } module X { header "x.h" export * } module Y { header "y.h" export * } +module na { header "na.h" export * } +module nb { header "nb.h" export * } diff --git a/test/Modules/Inputs/cxx-lookup/na.h b/test/Modules/Inputs/cxx-lookup/na.h new file mode 100644 index 000000000000..684d37e8a08a --- /dev/null +++ b/test/Modules/Inputs/cxx-lookup/na.h @@ -0,0 +1 @@ +namespace N { struct S { friend struct foo; }; } diff --git a/test/Modules/Inputs/cxx-lookup/nb.h b/test/Modules/Inputs/cxx-lookup/nb.h new file mode 100644 index 000000000000..092c882c64d8 --- /dev/null +++ b/test/Modules/Inputs/cxx-lookup/nb.h @@ -0,0 +1 @@ +namespace N { extern int n; } diff --git a/test/Modules/Inputs/declare-use/module.map b/test/Modules/Inputs/declare-use/module.map index ae8615278aca..2dad0d061cfe 100644 --- a/test/Modules/Inputs/declare-use/module.map +++ b/test/Modules/Inputs/declare-use/module.map @@ -3,7 +3,7 @@ module XA { } module XB { - header "b.h" + module B { header "b.h" } } module XC { @@ -39,10 +39,11 @@ module XG { use XE use XJ use XK + use XN } module XH { - header "h.h" + module H { header "h.h" } header "h1.h" header "s.h" use XC @@ -66,5 +67,11 @@ module XM { textual header "m2.h" } +module XN { + module sub { + header "sub.h" + } +} + module XS { } diff --git a/test/Modules/Inputs/declare-use/sub.h b/test/Modules/Inputs/declare-use/sub.h new file mode 100644 index 000000000000..63d4234ce707 --- /dev/null +++ b/test/Modules/Inputs/declare-use/sub.h @@ -0,0 +1,4 @@ +#ifndef SUB_H +#define SUB_H +const int sub = 42; +#endif diff --git a/test/Modules/Inputs/deferred-lookup/a.h b/test/Modules/Inputs/deferred-lookup/a.h new file mode 100644 index 000000000000..751aae014961 --- /dev/null +++ b/test/Modules/Inputs/deferred-lookup/a.h @@ -0,0 +1 @@ +namespace N { int f(int); } diff --git a/test/Modules/Inputs/deferred-lookup/b.h b/test/Modules/Inputs/deferred-lookup/b.h new file mode 100644 index 000000000000..23925e2e93ce --- /dev/null +++ b/test/Modules/Inputs/deferred-lookup/b.h @@ -0,0 +1,6 @@ +namespace N { template<typename T> struct A { friend int f(A); }; } +namespace N { int f(int); } +namespace N { int f(int); } +#include "a.h" +namespace N { int f(int); } +inline int g() { return f(N::A<int>()); } diff --git a/test/Modules/Inputs/deferred-lookup/module.modulemap b/test/Modules/Inputs/deferred-lookup/module.modulemap new file mode 100644 index 000000000000..61578a1865aa --- /dev/null +++ b/test/Modules/Inputs/deferred-lookup/module.modulemap @@ -0,0 +1,2 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } diff --git a/test/Modules/Inputs/diagnostics-aux.modulemap b/test/Modules/Inputs/diagnostics-aux.modulemap new file mode 100644 index 000000000000..d067d04d3d6a --- /dev/null +++ b/test/Modules/Inputs/diagnostics-aux.modulemap @@ -0,0 +1 @@ +module foo {} diff --git a/test/Modules/Inputs/empty.h b/test/Modules/Inputs/empty.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test/Modules/Inputs/empty.h diff --git a/test/Modules/Inputs/empty/empty.h b/test/Modules/Inputs/empty/empty.h new file mode 100644 index 000000000000..e26b0ab556c1 --- /dev/null +++ b/test/Modules/Inputs/empty/empty.h @@ -0,0 +1 @@ +// This file intentionally left empty. diff --git a/test/Modules/Inputs/explicit-build/d.h b/test/Modules/Inputs/explicit-build/d.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test/Modules/Inputs/explicit-build/d.h diff --git a/test/Modules/Inputs/explicit-build/module.modulemap b/test/Modules/Inputs/explicit-build/module.modulemap index bd6ea830c2d4..992eed683580 100644 --- a/test/Modules/Inputs/explicit-build/module.modulemap +++ b/test/Modules/Inputs/explicit-build/module.modulemap @@ -1,3 +1,4 @@ module a { header "a.h" } module b { header "b.h" export * } module c { header "c.h" export * } +module d { header "d.h" } diff --git a/test/Modules/Inputs/header-in-multiple-maps/a.h b/test/Modules/Inputs/header-in-multiple-maps/a.h new file mode 100644 index 000000000000..4c5cd949f234 --- /dev/null +++ b/test/Modules/Inputs/header-in-multiple-maps/a.h @@ -0,0 +1 @@ +struct A {}; diff --git a/test/Modules/Inputs/header-in-multiple-maps/map1 b/test/Modules/Inputs/header-in-multiple-maps/map1 new file mode 100644 index 000000000000..ba9baac00ca5 --- /dev/null +++ b/test/Modules/Inputs/header-in-multiple-maps/map1 @@ -0,0 +1,3 @@ +module a { header "a.h" } +module b { header "a.h" } +module c { textual header "a.h" } diff --git a/test/Modules/Inputs/header-in-multiple-maps/map2 b/test/Modules/Inputs/header-in-multiple-maps/map2 new file mode 100644 index 000000000000..67e0df3b55f5 --- /dev/null +++ b/test/Modules/Inputs/header-in-multiple-maps/map2 @@ -0,0 +1,3 @@ +module a { textual header "a.h" } +module b { header "a.h" } +module c { header "a.h" } diff --git a/test/Modules/Inputs/header-in-multiple-maps/map3 b/test/Modules/Inputs/header-in-multiple-maps/map3 new file mode 100644 index 000000000000..c859fd74b5d2 --- /dev/null +++ b/test/Modules/Inputs/header-in-multiple-maps/map3 @@ -0,0 +1,3 @@ +module a { header "a.h" } +module b { textual header "a.h" } +module c { header "a.h" } diff --git a/test/Modules/Inputs/initializer_list b/test/Modules/Inputs/initializer_list/direct.h index 6058f803a3dd..6058f803a3dd 100644 --- a/test/Modules/Inputs/initializer_list +++ b/test/Modules/Inputs/initializer_list/direct.h diff --git a/test/Modules/Inputs/initializer_list/direct.modulemap b/test/Modules/Inputs/initializer_list/direct.modulemap new file mode 100644 index 000000000000..56a410002012 --- /dev/null +++ b/test/Modules/Inputs/initializer_list/direct.modulemap @@ -0,0 +1 @@ +module initializer_list { header "direct.h" } diff --git a/test/Modules/Inputs/initializer_list/indirect.h b/test/Modules/Inputs/initializer_list/indirect.h new file mode 100644 index 000000000000..75e9817dce37 --- /dev/null +++ b/test/Modules/Inputs/initializer_list/indirect.h @@ -0,0 +1 @@ +#include "direct.h" diff --git a/test/Modules/Inputs/initializer_list/indirect.modulemap b/test/Modules/Inputs/initializer_list/indirect.modulemap new file mode 100644 index 000000000000..14deacfddfe1 --- /dev/null +++ b/test/Modules/Inputs/initializer_list/indirect.modulemap @@ -0,0 +1 @@ +module initializer_list { header "indirect.h" } diff --git a/test/Modules/Inputs/invalidate-identifiers/a.h b/test/Modules/Inputs/invalidate-identifiers/a.h new file mode 100644 index 000000000000..16fe9edcf4d7 --- /dev/null +++ b/test/Modules/Inputs/invalidate-identifiers/a.h @@ -0,0 +1,17 @@ +// Ensure that loading 'i' introduces enough identifiers to cause the +// identifier table to be reallocated. +#define TYPEDEFS(x) typedef x##0 x; typedef x##1 x; +#define DEPTH_0(x) DEPTH_1(x##0) DEPTH_1(x##1) TYPEDEFS(x) +#define DEPTH_1(x) DEPTH_2(x##0) DEPTH_2(x##1) TYPEDEFS(x) +#define DEPTH_2(x) DEPTH_3(x##0) DEPTH_3(x##1) TYPEDEFS(x) +#define DEPTH_3(x) DEPTH_4(x##0) DEPTH_4(x##1) TYPEDEFS(x) +#define DEPTH_4(x) DEPTH_5(x##0) DEPTH_5(x##1) TYPEDEFS(x) +#define DEPTH_5(x) DEPTH_6(x##0) DEPTH_6(x##1) TYPEDEFS(x) +#define DEPTH_6(x) DEPTH_7(x##0) DEPTH_7(x##1) TYPEDEFS(x) +#define DEPTH_7(x) DEPTH_8(x##0) DEPTH_8(x##1) TYPEDEFS(x) +#define DEPTH_8(x) DEPTH_9(x##0) DEPTH_9(x##1) TYPEDEFS(x) +#define DEPTH_9(x) DEPTH_A(x##0) DEPTH_A(x##1) TYPEDEFS(x) +#define DEPTH_A(x) DEPTH_B(x##0) DEPTH_B(x##1) TYPEDEFS(x) +#define DEPTH_B(x) typedef int x; +DEPTH_0(i) +extern i v; diff --git a/test/Modules/Inputs/invalidate-identifiers/b.h b/test/Modules/Inputs/invalidate-identifiers/b.h new file mode 100644 index 000000000000..2af246dc7749 --- /dev/null +++ b/test/Modules/Inputs/invalidate-identifiers/b.h @@ -0,0 +1,2 @@ +extern int v; +#include "a.h" diff --git a/test/Modules/Inputs/invalidate-identifiers/module.modulemap b/test/Modules/Inputs/invalidate-identifiers/module.modulemap new file mode 100644 index 000000000000..a36568207b68 --- /dev/null +++ b/test/Modules/Inputs/invalidate-identifiers/module.modulemap @@ -0,0 +1,2 @@ +module a { header "a.h" } +module b { header "b.h" } diff --git a/test/Modules/Inputs/macro-ambiguity/a/quote/a_quote.h b/test/Modules/Inputs/macro-ambiguity/a/quote/a_quote.h new file mode 100644 index 000000000000..efe6fa195230 --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/a/quote/a_quote.h @@ -0,0 +1,8 @@ +#ifndef A_QUOTE_H +#define A_QUOTE_H + +#define FOO1_QUOTE(x) x + x +#define BAR1_QUOTE(x) x + x +#define BAZ1_QUOTE(x) x + x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/a/system/a_system.h b/test/Modules/Inputs/macro-ambiguity/a/system/a_system.h new file mode 100644 index 000000000000..f9f32879ae91 --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/a/system/a_system.h @@ -0,0 +1,15 @@ +#ifndef A_SYSTEM_H +#define A_SYSTEM_H + +// FIXME: We have to use this to mark the header as a system header in +// a module because header search didn't actually occur and so we can't have +// found the header via system header search, even though when we map to this +// header and load the module we will have mapped to the header by finding it +// via system header search. +#pragma GCC system_header + +#define FOO1_SYSTEM(x) x + x +#define BAR1_SYSTEM(x) x + x +#define BAZ1_SYSTEM(x) x + x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/b/quote/b_quote.h b/test/Modules/Inputs/macro-ambiguity/b/quote/b_quote.h new file mode 100644 index 000000000000..f5e990f1464d --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/b/quote/b_quote.h @@ -0,0 +1,8 @@ +#ifndef B_QUOTE_H +#define B_QUOTE_H + +#define FOO2_QUOTE(x) x + x +#define BAR2_QUOTE(x) x + x +#define BAZ2_QUOTE(x) x + x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/b/system/b_system.h b/test/Modules/Inputs/macro-ambiguity/b/system/b_system.h new file mode 100644 index 000000000000..5b55303265e5 --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/b/system/b_system.h @@ -0,0 +1,15 @@ +#ifndef B_SYSTEM_H +#define B_SYSTEM_H + +// FIXME: We have to use this to mark the header as a system header in +// a module because header search didn't actually occur and so we can't have +// found the header via system header search, even though when we map to this +// header and load the module we will have mapped to the header by finding it +// via system header search. +#pragma GCC system_header + +#define FOO2_SYSTEM(x) x + x +#define BAR2_SYSTEM(x) x + x +#define BAZ2_SYSTEM(x) x + x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/c/quote/c_quote.h b/test/Modules/Inputs/macro-ambiguity/c/quote/c_quote.h new file mode 100644 index 000000000000..131430026f8c --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/c/quote/c_quote.h @@ -0,0 +1,7 @@ +#ifndef C_QUOTE_H +#define C_QUOTE_H + +#define FOO1_QUOTE(x) 2 * x +#define FOO2_QUOTE(x) 2 * x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/c/system/c_system.h b/test/Modules/Inputs/macro-ambiguity/c/system/c_system.h new file mode 100644 index 000000000000..25e795d71da0 --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/c/system/c_system.h @@ -0,0 +1,14 @@ +#ifndef C_SYSTEM_H +#define C_SYSTEM_H + +// FIXME: We have to use this to mark the header as a system header in +// a module because header search didn't actually occur and so we can't have +// found the header via system header search, even though when we map to this +// header and load the module we will have mapped to the header by finding it +// via system header search. +#pragma GCC system_header + +#define FOO1_SYSTEM(x) 2 * x +#define FOO2_SYSTEM(x) 2 * x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/d/quote/d_quote.h b/test/Modules/Inputs/macro-ambiguity/d/quote/d_quote.h new file mode 100644 index 000000000000..ac9d43b9efea --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/d/quote/d_quote.h @@ -0,0 +1,7 @@ +#ifndef D_QUOTE_H +#define D_QUOTE_H + +#define BAR1_QUOTE(x) 2 * x +#define BAR2_QUOTE(x) 2 * x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/d/system/d_system.h b/test/Modules/Inputs/macro-ambiguity/d/system/d_system.h new file mode 100644 index 000000000000..5c10cc14e889 --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/d/system/d_system.h @@ -0,0 +1,14 @@ +#ifndef D_SYSTEM_H +#define D_SYSTEM_H + +// FIXME: We have to use this to mark the header as a system header in +// a module because header search didn't actually occur and so we can't have +// found the header via system header search, even though when we map to this +// header and load the module we will have mapped to the header by finding it +// via system header search. +#pragma GCC system_header + +#define BAR1_SYSTEM(x) 2 * x +#define BAR2_SYSTEM(x) 2 * x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/e/quote/e_quote.h b/test/Modules/Inputs/macro-ambiguity/e/quote/e_quote.h new file mode 100644 index 000000000000..78494299a944 --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/e/quote/e_quote.h @@ -0,0 +1,7 @@ +#ifndef E_QUOTE_H +#define E_QUOTE_H + +#define BAZ1_QUOTE(x) 2 * x +#define BAZ2_QUOTE(x) 2 * x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/e/system/e_system.h b/test/Modules/Inputs/macro-ambiguity/e/system/e_system.h new file mode 100644 index 000000000000..c9e13419edc5 --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/e/system/e_system.h @@ -0,0 +1,7 @@ +#ifndef E_SYSTEM_H +#define E_SYSTEM_H + +#define BAZ1_SYSTEM(x) 2 * x +#define BAZ2_SYSTEM(x) 2 * x + +#endif diff --git a/test/Modules/Inputs/macro-ambiguity/module.modulemap b/test/Modules/Inputs/macro-ambiguity/module.modulemap new file mode 100644 index 000000000000..23da294c745f --- /dev/null +++ b/test/Modules/Inputs/macro-ambiguity/module.modulemap @@ -0,0 +1,25 @@ +module a { + header "Inputs/macro-ambiguity/a/quote/a_quote.h" + header "Inputs/macro-ambiguity/a/system/a_system.h" + export * +} +module b [system] { + header "Inputs/macro-ambiguity/b/quote/b_quote.h" + header "Inputs/macro-ambiguity/b/system/b_system.h" + export * +} +module c { + header "Inputs/macro-ambiguity/c/quote/c_quote.h" + header "Inputs/macro-ambiguity/c/system/c_system.h" + export * +} +module d [system] { + header "Inputs/macro-ambiguity/d/quote/d_quote.h" + header "Inputs/macro-ambiguity/d/system/d_system.h" + export * +} +module e { + textual header "Inputs/macro-ambiguity/e/quote/e_quote.h" + textual header "Inputs/macro-ambiguity/e/system/e_system.h" + export * +} diff --git a/test/Modules/Inputs/macro-masking/a.h b/test/Modules/Inputs/macro-masking/a.h new file mode 100644 index 000000000000..dbc17b8cbcf6 --- /dev/null +++ b/test/Modules/Inputs/macro-masking/a.h @@ -0,0 +1,2 @@ +#define MACRO +#include "b.h" diff --git a/test/Modules/Inputs/macro-masking/b.h b/test/Modules/Inputs/macro-masking/b.h new file mode 100644 index 000000000000..0d14daf13af3 --- /dev/null +++ b/test/Modules/Inputs/macro-masking/b.h @@ -0,0 +1 @@ +#undef MACRO diff --git a/test/Modules/Inputs/macro-masking/module.modulemap b/test/Modules/Inputs/macro-masking/module.modulemap new file mode 100644 index 000000000000..63e1014dda80 --- /dev/null +++ b/test/Modules/Inputs/macro-masking/module.modulemap @@ -0,0 +1,4 @@ +module X { + module A { header "a.h" export * } + module B { header "b.h" export * } +} diff --git a/test/Modules/Inputs/macro-reexport/a1.h b/test/Modules/Inputs/macro-reexport/a1.h new file mode 100644 index 000000000000..39933315f7ee --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/a1.h @@ -0,0 +1 @@ +#define assert(x) a diff --git a/test/Modules/Inputs/macro-reexport/a2.h b/test/Modules/Inputs/macro-reexport/a2.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/a2.h diff --git a/test/Modules/Inputs/macro-reexport/b1.h b/test/Modules/Inputs/macro-reexport/b1.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/b1.h diff --git a/test/Modules/Inputs/macro-reexport/b2.h b/test/Modules/Inputs/macro-reexport/b2.h new file mode 100644 index 000000000000..26150458d353 --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/b2.h @@ -0,0 +1,2 @@ +#include "a2.h" +#define assert(x) b diff --git a/test/Modules/Inputs/macro-reexport/c1.h b/test/Modules/Inputs/macro-reexport/c1.h new file mode 100644 index 000000000000..b63c278577f6 --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/c1.h @@ -0,0 +1,4 @@ +#pragma once + +#include "b1.h" +#define assert(x) c diff --git a/test/Modules/Inputs/macro-reexport/d1.h b/test/Modules/Inputs/macro-reexport/d1.h new file mode 100644 index 000000000000..99abd2481597 --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/d1.h @@ -0,0 +1,5 @@ +#pragma once + +#include "c1.h" +#undef assert +#define assert(x) d diff --git a/test/Modules/Inputs/macro-reexport/d2.h b/test/Modules/Inputs/macro-reexport/d2.h new file mode 100644 index 000000000000..688f2d98a13b --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/d2.h @@ -0,0 +1 @@ +#include "b2.h" diff --git a/test/Modules/Inputs/macro-reexport/e1.h b/test/Modules/Inputs/macro-reexport/e1.h new file mode 100644 index 000000000000..6c6829df3654 --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/e1.h @@ -0,0 +1,2 @@ +#include "c1.h" +#undef assert diff --git a/test/Modules/Inputs/macro-reexport/e2.h b/test/Modules/Inputs/macro-reexport/e2.h new file mode 100644 index 000000000000..7bc0b4972d2c --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/e2.h @@ -0,0 +1,2 @@ +#include "d1.h" +#undef assert diff --git a/test/Modules/Inputs/macro-reexport/f1.h b/test/Modules/Inputs/macro-reexport/f1.h new file mode 100644 index 000000000000..f8f6502a90c6 --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/f1.h @@ -0,0 +1,3 @@ +#include "e1.h" +#include "d1.h" + diff --git a/test/Modules/Inputs/macro-reexport/module.modulemap b/test/Modules/Inputs/macro-reexport/module.modulemap new file mode 100644 index 000000000000..896bda041c30 --- /dev/null +++ b/test/Modules/Inputs/macro-reexport/module.modulemap @@ -0,0 +1,23 @@ +module b { + module b2 { header "b2.h" export * } + module b1 { header "b1.h" export * } +} +module a { + module a1 { header "a1.h" export * } + module a2 { header "a2.h" export * } +} +module c { + module c1 { header "c1.h" export * } +} +module d { + module d1 { header "d1.h" export * } + module d2 { header "d2.h" export * } +} +module e { + module e1 { header "e1.h" export * } + module e2 { header "e2.h" export * } +} +module f { + module f1 { header "f1.h" export * } + module f2 { header "f2.h" export * } +} diff --git a/test/Modules/Inputs/macros-indirect.h b/test/Modules/Inputs/macros-indirect.h new file mode 100644 index 000000000000..c90300e464fb --- /dev/null +++ b/test/Modules/Inputs/macros-indirect.h @@ -0,0 +1 @@ +#define INDIRECTLY_IN_MACROS 1 diff --git a/test/Modules/Inputs/macros.h b/test/Modules/Inputs/macros.h index 27f43c0626ec..a0ae7a315822 100644 --- a/test/Modules/Inputs/macros.h +++ b/test/Modules/Inputs/macros.h @@ -17,3 +17,4 @@ int (INTEGER); extern int __MODULE__; #endif +#include "macros-indirect.h" diff --git a/test/Modules/Inputs/merge-anon-in-template/a.h b/test/Modules/Inputs/merge-anon-in-template/a.h new file mode 100644 index 000000000000..82540e397bf3 --- /dev/null +++ b/test/Modules/Inputs/merge-anon-in-template/a.h @@ -0,0 +1,4 @@ +template<typename T> struct is_floating { + enum { value = 0 }; + typedef int type; +}; diff --git a/test/Modules/Inputs/merge-anon-in-template/b.h b/test/Modules/Inputs/merge-anon-in-template/b.h new file mode 100644 index 000000000000..87c053d962d4 --- /dev/null +++ b/test/Modules/Inputs/merge-anon-in-template/b.h @@ -0,0 +1,2 @@ +#include "a.h" +bool k = is_floating<int>::value; diff --git a/test/Modules/Inputs/merge-anon-in-template/c.h b/test/Modules/Inputs/merge-anon-in-template/c.h new file mode 100644 index 000000000000..e0b9b0a3317c --- /dev/null +++ b/test/Modules/Inputs/merge-anon-in-template/c.h @@ -0,0 +1,6 @@ +template<typename T> struct is_floating { + enum { value = 0 }; + typedef int type; +}; +#include "b.h" +bool n20 = is_floating<int>::value; diff --git a/test/Modules/Inputs/merge-anon-in-template/module.modulemap b/test/Modules/Inputs/merge-anon-in-template/module.modulemap new file mode 100644 index 000000000000..77e0a89e39a0 --- /dev/null +++ b/test/Modules/Inputs/merge-anon-in-template/module.modulemap @@ -0,0 +1,3 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } +module c { header "c.h" export * } diff --git a/test/Modules/Inputs/merge-decl-context/a.h b/test/Modules/Inputs/merge-decl-context/a.h new file mode 100644 index 000000000000..89cc7120fd17 --- /dev/null +++ b/test/Modules/Inputs/merge-decl-context/a.h @@ -0,0 +1,24 @@ +#ifndef A_H +#define A_H + +template <typename T> +struct A { + template <typename I> + A(I i1, I i2) { + } + A(double) {} + A(double, double) {} + A(double, int) {} + A(int, double) {} +}; + +template <typename T1, typename T2> +T1 fff(T2* t) { + return T1(t, t); +} + +inline A<int> ff(int i) { + return fff<A<int>>(&i); +} + +#endif diff --git a/test/Modules/Inputs/merge-decl-context/b.h b/test/Modules/Inputs/merge-decl-context/b.h new file mode 100644 index 000000000000..cb06ac8e27c9 --- /dev/null +++ b/test/Modules/Inputs/merge-decl-context/b.h @@ -0,0 +1,6 @@ +#ifndef B_H +#define B_H + +#include "a.h" + +#endif diff --git a/test/Modules/Inputs/merge-decl-context/c.h b/test/Modules/Inputs/merge-decl-context/c.h new file mode 100644 index 000000000000..af3a723969be --- /dev/null +++ b/test/Modules/Inputs/merge-decl-context/c.h @@ -0,0 +1,7 @@ +#ifndef C_H +#define C_H + +#include "a.h" +#include "b.h" + +#endif diff --git a/test/Modules/Inputs/merge-decl-context/d.h b/test/Modules/Inputs/merge-decl-context/d.h new file mode 100644 index 000000000000..ccc7308b2499 --- /dev/null +++ b/test/Modules/Inputs/merge-decl-context/d.h @@ -0,0 +1,7 @@ +#ifndef D_H +#define D_H + +#include "a.h" +#include "b.h" + +#endif diff --git a/test/Modules/Inputs/merge-decl-context/merge-decl-context.modulemap b/test/Modules/Inputs/merge-decl-context/merge-decl-context.modulemap new file mode 100644 index 000000000000..46f69548bc67 --- /dev/null +++ b/test/Modules/Inputs/merge-decl-context/merge-decl-context.modulemap @@ -0,0 +1,18 @@ +module "a" { + textual header "a.h" +} + +module "b" { + export * + header "b.h" +} + +module "c" { + export * + header "c.h" +} + +module "d" { + export * + header "d.h" +} diff --git a/test/Modules/Inputs/merge-decl-order/a.h b/test/Modules/Inputs/merge-decl-order/a.h new file mode 100644 index 000000000000..f505a424c7e6 --- /dev/null +++ b/test/Modules/Inputs/merge-decl-order/a.h @@ -0,0 +1,2 @@ +namespace N { struct SA { friend struct foo; }; } +namespace N { struct foo; } diff --git a/test/Modules/Inputs/merge-decl-order/b.h b/test/Modules/Inputs/merge-decl-order/b.h new file mode 100644 index 000000000000..49b06cafd05e --- /dev/null +++ b/test/Modules/Inputs/merge-decl-order/b.h @@ -0,0 +1,2 @@ +namespace N { struct SB { friend struct foo; }; } +#include "a.h" diff --git a/test/Modules/Inputs/merge-decl-order/module.modulemap b/test/Modules/Inputs/merge-decl-order/module.modulemap new file mode 100644 index 000000000000..61578a1865aa --- /dev/null +++ b/test/Modules/Inputs/merge-decl-order/module.modulemap @@ -0,0 +1,2 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } diff --git a/test/Modules/Inputs/merge-dependent-friends/a.h b/test/Modules/Inputs/merge-dependent-friends/a.h new file mode 100644 index 000000000000..44b1c1db5688 --- /dev/null +++ b/test/Modules/Inputs/merge-dependent-friends/a.h @@ -0,0 +1,2 @@ +namespace N { template<typename T> struct A { friend int f(A); }; } +int a = f(N::A<int>()); diff --git a/test/Modules/Inputs/merge-dependent-friends/b.h b/test/Modules/Inputs/merge-dependent-friends/b.h new file mode 100644 index 000000000000..bce33876d54d --- /dev/null +++ b/test/Modules/Inputs/merge-dependent-friends/b.h @@ -0,0 +1,2 @@ +namespace N { template<typename T> struct A { friend int f(A); }; } +int b = f(N::A<int>()); diff --git a/test/Modules/Inputs/merge-dependent-friends/c.h b/test/Modules/Inputs/merge-dependent-friends/c.h new file mode 100644 index 000000000000..3620ce3d539f --- /dev/null +++ b/test/Modules/Inputs/merge-dependent-friends/c.h @@ -0,0 +1,6 @@ +namespace N { template<typename T> struct A { friend int f(A); }; } +// It would seem like this variable should be called 'c'. +// But that makes the original problem disappear... +int e = f(N::A<int>()); +#include "a.h" +#include "b.h" diff --git a/test/Modules/Inputs/merge-dependent-friends/d.h b/test/Modules/Inputs/merge-dependent-friends/d.h new file mode 100644 index 000000000000..ce3f69fa387f --- /dev/null +++ b/test/Modules/Inputs/merge-dependent-friends/d.h @@ -0,0 +1,2 @@ +namespace N { template<typename T> struct A { friend int f(A); }; } +#include "c.h" diff --git a/test/Modules/Inputs/merge-dependent-friends/module.modulemap b/test/Modules/Inputs/merge-dependent-friends/module.modulemap new file mode 100644 index 000000000000..73a7c41ec589 --- /dev/null +++ b/test/Modules/Inputs/merge-dependent-friends/module.modulemap @@ -0,0 +1,4 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } +module c { header "c.h" export * } +module d { header "d.h" export * } diff --git a/test/Modules/Inputs/merge-friends/decl.h b/test/Modules/Inputs/merge-friends/decl.h new file mode 100644 index 000000000000..f658f94ff987 --- /dev/null +++ b/test/Modules/Inputs/merge-friends/decl.h @@ -0,0 +1 @@ +namespace N { struct foo; } diff --git a/test/Modules/Inputs/merge-friends/friend.h b/test/Modules/Inputs/merge-friends/friend.h new file mode 100644 index 000000000000..bbbd8edb3a4f --- /dev/null +++ b/test/Modules/Inputs/merge-friends/friend.h @@ -0,0 +1,2 @@ +namespace N { struct n8 { friend struct foo; }; } +#include "decl.h" diff --git a/test/Modules/Inputs/merge-friends/module.modulemap b/test/Modules/Inputs/merge-friends/module.modulemap new file mode 100644 index 000000000000..1fa52c91c8d4 --- /dev/null +++ b/test/Modules/Inputs/merge-friends/module.modulemap @@ -0,0 +1,2 @@ +module decl { header "decl.h" export * } +module friend { header "friend.h" export * } diff --git a/test/Modules/Inputs/merge-implicit-special-members/a.h b/test/Modules/Inputs/merge-implicit-special-members/a.h new file mode 100644 index 000000000000..3029e4afb85a --- /dev/null +++ b/test/Modules/Inputs/merge-implicit-special-members/a.h @@ -0,0 +1 @@ +struct pthread_mutex_t { int lock; }; diff --git a/test/Modules/Inputs/merge-implicit-special-members/b.h b/test/Modules/Inputs/merge-implicit-special-members/b.h new file mode 100644 index 000000000000..3029e4afb85a --- /dev/null +++ b/test/Modules/Inputs/merge-implicit-special-members/b.h @@ -0,0 +1 @@ +struct pthread_mutex_t { int lock; }; diff --git a/test/Modules/Inputs/merge-implicit-special-members/c.h b/test/Modules/Inputs/merge-implicit-special-members/c.h new file mode 100644 index 000000000000..ee0bebb2ee79 --- /dev/null +++ b/test/Modules/Inputs/merge-implicit-special-members/c.h @@ -0,0 +1,3 @@ +#include "a.h" +#include "b.h" +int k = pthread_mutex_t().lock; diff --git a/test/Modules/Inputs/merge-implicit-special-members/module.modulemap b/test/Modules/Inputs/merge-implicit-special-members/module.modulemap new file mode 100644 index 000000000000..77e0a89e39a0 --- /dev/null +++ b/test/Modules/Inputs/merge-implicit-special-members/module.modulemap @@ -0,0 +1,3 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } +module c { header "c.h" export * } diff --git a/test/Modules/Inputs/merge-name-for-linkage/a.h b/test/Modules/Inputs/merge-name-for-linkage/a.h new file mode 100644 index 000000000000..82f2fdd83e31 --- /dev/null +++ b/test/Modules/Inputs/merge-name-for-linkage/a.h @@ -0,0 +1 @@ +typedef union {} pthread_mutex_t; diff --git a/test/Modules/Inputs/merge-name-for-linkage/b.h b/test/Modules/Inputs/merge-name-for-linkage/b.h new file mode 100644 index 000000000000..82f2fdd83e31 --- /dev/null +++ b/test/Modules/Inputs/merge-name-for-linkage/b.h @@ -0,0 +1 @@ +typedef union {} pthread_mutex_t; diff --git a/test/Modules/Inputs/merge-name-for-linkage/module.modulemap b/test/Modules/Inputs/merge-name-for-linkage/module.modulemap new file mode 100644 index 000000000000..61578a1865aa --- /dev/null +++ b/test/Modules/Inputs/merge-name-for-linkage/module.modulemap @@ -0,0 +1,2 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } diff --git a/test/Modules/Inputs/merge-nested-templates/a.h b/test/Modules/Inputs/merge-nested-templates/a.h new file mode 100644 index 000000000000..826d2571fd11 --- /dev/null +++ b/test/Modules/Inputs/merge-nested-templates/a.h @@ -0,0 +1 @@ +#include "string.ii" diff --git a/test/Modules/Inputs/merge-nested-templates/b.h b/test/Modules/Inputs/merge-nested-templates/b.h new file mode 100644 index 000000000000..516694e38e98 --- /dev/null +++ b/test/Modules/Inputs/merge-nested-templates/b.h @@ -0,0 +1,2 @@ +#include "a.h" +std::wstring::iterator j; diff --git a/test/Modules/Inputs/merge-nested-templates/c.h b/test/Modules/Inputs/merge-nested-templates/c.h new file mode 100644 index 000000000000..ab95e145ef52 --- /dev/null +++ b/test/Modules/Inputs/merge-nested-templates/c.h @@ -0,0 +1,3 @@ +#include "string.ii" +std::wstring::iterator i; +#include "b.h" diff --git a/test/Modules/Inputs/merge-nested-templates/module.modulemap b/test/Modules/Inputs/merge-nested-templates/module.modulemap new file mode 100644 index 000000000000..77e0a89e39a0 --- /dev/null +++ b/test/Modules/Inputs/merge-nested-templates/module.modulemap @@ -0,0 +1,3 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } +module c { header "c.h" export * } diff --git a/test/Modules/Inputs/merge-nested-templates/string.ii b/test/Modules/Inputs/merge-nested-templates/string.ii new file mode 100644 index 000000000000..136d8e70083d --- /dev/null +++ b/test/Modules/Inputs/merge-nested-templates/string.ii @@ -0,0 +1,14 @@ +namespace std { + template <typename, typename Container> struct normal_iterator { + normal_iterator() {} + + template <typename I> + normal_iterator(normal_iterator<I, typename Container::iterator>) {} + }; + + template <typename pointer> struct basic_string { + typedef normal_iterator<pointer, basic_string> iterator; + }; + + typedef basic_string<wchar_t *> wstring; +} diff --git a/test/Modules/Inputs/merge-target-features/foo.h b/test/Modules/Inputs/merge-target-features/foo.h new file mode 100644 index 000000000000..1c8b3f62826a --- /dev/null +++ b/test/Modules/Inputs/merge-target-features/foo.h @@ -0,0 +1,8 @@ +#ifndef FOO_H +#define FOO_H + +int foo(int x) { + return x + 42; +} + +#endif // FOO_H diff --git a/test/Modules/Inputs/merge-target-features/module.modulemap b/test/Modules/Inputs/merge-target-features/module.modulemap new file mode 100644 index 000000000000..f2e9932e4a4f --- /dev/null +++ b/test/Modules/Inputs/merge-target-features/module.modulemap @@ -0,0 +1 @@ +module foo { header "Inputs/merge-target-features/foo.h" export * } diff --git a/test/Modules/Inputs/merge-template-friend/def.h b/test/Modules/Inputs/merge-template-friend/def.h new file mode 100644 index 000000000000..c75f5f6867bb --- /dev/null +++ b/test/Modules/Inputs/merge-template-friend/def.h @@ -0,0 +1,3 @@ +namespace ns { +template <typename T> class C {}; +} diff --git a/test/Modules/Inputs/merge-template-friend/friend.h b/test/Modules/Inputs/merge-template-friend/friend.h new file mode 100644 index 000000000000..97fb758b437e --- /dev/null +++ b/test/Modules/Inputs/merge-template-friend/friend.h @@ -0,0 +1,4 @@ +namespace ns { template <typename T> class C; }; +class A { + template <typename T> friend class ::ns::C; +}; diff --git a/test/Modules/Inputs/merge-template-friend/module.modulemap b/test/Modules/Inputs/merge-template-friend/module.modulemap new file mode 100644 index 000000000000..7737ad9b0ca2 --- /dev/null +++ b/test/Modules/Inputs/merge-template-friend/module.modulemap @@ -0,0 +1,3 @@ +module a { header "friend.h" export * } +module b { header "def.h" export * } + diff --git a/test/Modules/Inputs/merge-template-members/a1.h b/test/Modules/Inputs/merge-template-members/a1.h new file mode 100644 index 000000000000..9212a3f0debc --- /dev/null +++ b/test/Modules/Inputs/merge-template-members/a1.h @@ -0,0 +1,9 @@ +namespace N { + template <typename> struct A { + int n; + A() : n() {} + }; + + // Create declaration of A<int>. + typedef A<int> AI; +} diff --git a/test/Modules/Inputs/merge-template-members/a2.h b/test/Modules/Inputs/merge-template-members/a2.h new file mode 100644 index 000000000000..9212a3f0debc --- /dev/null +++ b/test/Modules/Inputs/merge-template-members/a2.h @@ -0,0 +1,9 @@ +namespace N { + template <typename> struct A { + int n; + A() : n() {} + }; + + // Create declaration of A<int>. + typedef A<int> AI; +} diff --git a/test/Modules/Inputs/merge-template-members/b1.h b/test/Modules/Inputs/merge-template-members/b1.h new file mode 100644 index 000000000000..3828e267edde --- /dev/null +++ b/test/Modules/Inputs/merge-template-members/b1.h @@ -0,0 +1,6 @@ +#include "a1.h" + +// Add update record for definition of A<int> and constructors. +// We need an eagerly-emitted use here to get the problematic +// deserialization ordering. +N::A<int> b1; diff --git a/test/Modules/Inputs/merge-template-members/b2.h b/test/Modules/Inputs/merge-template-members/b2.h new file mode 100644 index 000000000000..37357acc6adf --- /dev/null +++ b/test/Modules/Inputs/merge-template-members/b2.h @@ -0,0 +1,6 @@ +#include "a2.h" + +// Add update record for definition of A<int> and constructors. +// We need an eagerly-emitted use here to get the problematic +// deserialization ordering. +N::A<int> b2; diff --git a/test/Modules/Inputs/merge-template-members/c.h b/test/Modules/Inputs/merge-template-members/c.h new file mode 100644 index 000000000000..92f20a0b1329 --- /dev/null +++ b/test/Modules/Inputs/merge-template-members/c.h @@ -0,0 +1,14 @@ +namespace N { + template <typename> struct A { + int n; + A() : n() {} + }; + + // Trigger instantiation of definition of A<int>. + struct C { + A<int> a; + }; +} + +// Merge in another declaration and update records. +#include "b1.h" diff --git a/test/Modules/Inputs/merge-template-members/def.h b/test/Modules/Inputs/merge-template-members/def.h new file mode 100644 index 000000000000..f9f65c34db05 --- /dev/null +++ b/test/Modules/Inputs/merge-template-members/def.h @@ -0,0 +1,2 @@ +template<typename> struct A { int n; }; +template<typename> struct B { typedef A<void> C; }; diff --git a/test/Modules/Inputs/merge-template-members/merge.h b/test/Modules/Inputs/merge-template-members/merge.h new file mode 100644 index 000000000000..72d2d3622e88 --- /dev/null +++ b/test/Modules/Inputs/merge-template-members/merge.h @@ -0,0 +1,2 @@ +#include "b1.h" +#include "b2.h" diff --git a/test/Modules/Inputs/merge-template-members/module.modulemap b/test/Modules/Inputs/merge-template-members/module.modulemap new file mode 100644 index 000000000000..0d72e58fbf1b --- /dev/null +++ b/test/Modules/Inputs/merge-template-members/module.modulemap @@ -0,0 +1,9 @@ +module def { header "def.h" export * } +module update { header "update.h" export * } + +module a1 { header "a1.h" export * } +module a2 { header "a2.h" export * } +module b1 { header "b1.h" export * } +module b2 { header "b2.h" export * } +module merge { header "merge.h" export * } +module c { header "c.h" export * } diff --git a/test/Modules/Inputs/merge-template-members/update.h b/test/Modules/Inputs/merge-template-members/update.h new file mode 100644 index 000000000000..cceb52db4039 --- /dev/null +++ b/test/Modules/Inputs/merge-template-members/update.h @@ -0,0 +1,2 @@ +#include "def.h" +B<int>::C use1; diff --git a/test/Modules/Inputs/merge-vtable-codegen/a.h b/test/Modules/Inputs/merge-vtable-codegen/a.h new file mode 100644 index 000000000000..c2885379aa41 --- /dev/null +++ b/test/Modules/Inputs/merge-vtable-codegen/a.h @@ -0,0 +1,8 @@ +#ifndef A_H +#define A_H + +struct A { + virtual void x(); +}; + +#endif diff --git a/test/Modules/Inputs/merge-vtable-codegen/b.h b/test/Modules/Inputs/merge-vtable-codegen/b.h new file mode 100644 index 000000000000..770e46077f93 --- /dev/null +++ b/test/Modules/Inputs/merge-vtable-codegen/b.h @@ -0,0 +1,17 @@ +#ifndef B_H +#define B_H + +#include "a.h" + +class B : virtual public A { + virtual void x() {} +}; + +void b(A* p) { + p->x(); + // Instantiating a class that virtually inherits 'A' + // triggers calculation of the vtable offsets in 'A'. + B b; +} + +#endif diff --git a/test/Modules/Inputs/merge-vtable-codegen/c.h b/test/Modules/Inputs/merge-vtable-codegen/c.h new file mode 100644 index 000000000000..40cbbb047cb4 --- /dev/null +++ b/test/Modules/Inputs/merge-vtable-codegen/c.h @@ -0,0 +1,6 @@ +#ifndef C_H +#define C_H + +#include "a.h" + +#endif diff --git a/test/Modules/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap b/test/Modules/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap new file mode 100644 index 000000000000..1edaa07101f9 --- /dev/null +++ b/test/Modules/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap @@ -0,0 +1,11 @@ +module "a" { + textual header "a.h" +} + +module "b" { + header "b.h" +} + +module "c" { + header "c.h" +} diff --git a/test/Modules/Inputs/module.map b/test/Modules/Inputs/module.map index 7040ee7e5ab6..8ec3e21121b7 100644 --- a/test/Modules/Inputs/module.map +++ b/test/Modules/Inputs/module.map @@ -296,10 +296,6 @@ module warn_unused_local_typedef { header "warn-unused-local-typedef.h" } -module initializer_list { - header "initializer_list" -} - module using_decl { module a { header "using-decl-a.h" export * } module b { header "using-decl-b.h" export * } diff --git a/test/Modules/Inputs/no-implicit-builds/b.h b/test/Modules/Inputs/no-implicit-builds/b.h new file mode 100644 index 000000000000..4fe1c76825cb --- /dev/null +++ b/test/Modules/Inputs/no-implicit-builds/b.h @@ -0,0 +1,6 @@ +#ifndef B_H +#define B_H + +int b; + +#endif diff --git a/test/Modules/Inputs/no-implicit-builds/b.modulemap b/test/Modules/Inputs/no-implicit-builds/b.modulemap new file mode 100644 index 000000000000..3c8ca540010c --- /dev/null +++ b/test/Modules/Inputs/no-implicit-builds/b.modulemap @@ -0,0 +1,3 @@ +module "b" { + header "b.h" +} diff --git a/test/Modules/Inputs/preprocess/file.h b/test/Modules/Inputs/preprocess/file.h new file mode 100644 index 000000000000..808ade5768b1 --- /dev/null +++ b/test/Modules/Inputs/preprocess/file.h @@ -0,0 +1,3 @@ +struct __FILE; +#include "fwd.h" +typedef struct __FILE FILE; diff --git a/test/Modules/Inputs/preprocess/fwd.h b/test/Modules/Inputs/preprocess/fwd.h new file mode 100644 index 000000000000..4a19c6d0c057 --- /dev/null +++ b/test/Modules/Inputs/preprocess/fwd.h @@ -0,0 +1 @@ +struct __FILE; diff --git a/test/Modules/Inputs/preprocess/module.modulemap b/test/Modules/Inputs/preprocess/module.modulemap new file mode 100644 index 000000000000..a5c5b61dddc5 --- /dev/null +++ b/test/Modules/Inputs/preprocess/module.modulemap @@ -0,0 +1,2 @@ +module fwd { header "fwd.h" export * } +module file { header "file.h" export * } diff --git a/test/Modules/Inputs/redecl-add-after-load-decls.h b/test/Modules/Inputs/redecl-add-after-load-decls.h index fbe6b9387a17..a4227971a876 100644 --- a/test/Modules/Inputs/redecl-add-after-load-decls.h +++ b/test/Modules/Inputs/redecl-add-after-load-decls.h @@ -16,9 +16,9 @@ typedef C::A CB; constexpr int C_test(bool b) { return b ? C::variable : C::function(); } struct D { - struct A; // expected-note {{forward}} + struct A; static const int variable; - static constexpr int function(); // expected-note {{here}} + static constexpr int function(); }; typedef D::A DB; -constexpr int D_test(bool b) { return b ? D::variable : D::function(); } // expected-note {{subexpression}} expected-note {{undefined}} +constexpr int D_test(bool b) { return b ? D::variable : D::function(); } diff --git a/test/Modules/Inputs/redecl-found-building-chains/a.h b/test/Modules/Inputs/redecl-found-building-chains/a.h new file mode 100644 index 000000000000..27f503c2c607 --- /dev/null +++ b/test/Modules/Inputs/redecl-found-building-chains/a.h @@ -0,0 +1 @@ +struct A; diff --git a/test/Modules/Inputs/redecl-found-building-chains/b.h b/test/Modules/Inputs/redecl-found-building-chains/b.h new file mode 100644 index 000000000000..f69dccb2a0f4 --- /dev/null +++ b/test/Modules/Inputs/redecl-found-building-chains/b.h @@ -0,0 +1,2 @@ +struct A; // ensure that loading b's canonical decl doesn't load the definition +struct A {}; diff --git a/test/Modules/Inputs/redecl-found-building-chains/c.h b/test/Modules/Inputs/redecl-found-building-chains/c.h new file mode 100644 index 000000000000..27f503c2c607 --- /dev/null +++ b/test/Modules/Inputs/redecl-found-building-chains/c.h @@ -0,0 +1 @@ +struct A; diff --git a/test/Modules/Inputs/redecl-found-building-chains/d.h b/test/Modules/Inputs/redecl-found-building-chains/d.h new file mode 100644 index 000000000000..0beef5a79da4 --- /dev/null +++ b/test/Modules/Inputs/redecl-found-building-chains/d.h @@ -0,0 +1,6 @@ +#include "a.h" // ensure that our canonical decl is not from b +struct A; +#include "b.h" +struct A; +#include "c.h" // ensure that our type for A doesn't reference the definition in b +struct A; diff --git a/test/Modules/Inputs/redecl-found-building-chains/module.modulemap b/test/Modules/Inputs/redecl-found-building-chains/module.modulemap new file mode 100644 index 000000000000..73a7c41ec589 --- /dev/null +++ b/test/Modules/Inputs/redecl-found-building-chains/module.modulemap @@ -0,0 +1,4 @@ +module a { header "a.h" export * } +module b { header "b.h" export * } +module c { header "c.h" export * } +module d { header "d.h" export * } diff --git a/test/Modules/Inputs/redecl-templates/a.h b/test/Modules/Inputs/redecl-templates/a.h new file mode 100644 index 000000000000..fd25fcf0768d --- /dev/null +++ b/test/Modules/Inputs/redecl-templates/a.h @@ -0,0 +1,8 @@ +template<int N> struct A; +template<> struct A<1>; + +template<int N> constexpr void f(); +template<> constexpr void f<1>(); + +template<int N> extern int v; +template<> extern int v<1>; diff --git a/test/Modules/Inputs/redecl-templates/module.modulemap b/test/Modules/Inputs/redecl-templates/module.modulemap new file mode 100644 index 000000000000..648035898f9c --- /dev/null +++ b/test/Modules/Inputs/redecl-templates/module.modulemap @@ -0,0 +1 @@ +module A { header "a.h" } diff --git a/test/Modules/Inputs/redecls/a.h b/test/Modules/Inputs/redecls/a.h new file mode 100644 index 000000000000..1647f86606a8 --- /dev/null +++ b/test/Modules/Inputs/redecls/a.h @@ -0,0 +1,3 @@ +@interface AA +@end +@class AA; diff --git a/test/Modules/Inputs/redecls/b.h b/test/Modules/Inputs/redecls/b.h new file mode 100644 index 000000000000..d41573ddc78a --- /dev/null +++ b/test/Modules/Inputs/redecls/b.h @@ -0,0 +1 @@ +@class AA; diff --git a/test/Modules/Inputs/redecls/module.map b/test/Modules/Inputs/redecls/module.map new file mode 100644 index 000000000000..a36568207b68 --- /dev/null +++ b/test/Modules/Inputs/redecls/module.map @@ -0,0 +1,2 @@ +module a { header "a.h" } +module b { header "b.h" } diff --git a/test/Modules/Inputs/self-import-header/af.framework/Headers/a1.h b/test/Modules/Inputs/self-import-header/af.framework/Headers/a1.h new file mode 100644 index 000000000000..31ae279bde2d --- /dev/null +++ b/test/Modules/Inputs/self-import-header/af.framework/Headers/a1.h @@ -0,0 +1,4 @@ +@import DepBuiltin; + +@interface Foo +@end diff --git a/test/Modules/Inputs/self-import-header/af.framework/Headers/a2.h b/test/Modules/Inputs/self-import-header/af.framework/Headers/a2.h new file mode 100644 index 000000000000..cc7e6e20b667 --- /dev/null +++ b/test/Modules/Inputs/self-import-header/af.framework/Headers/a2.h @@ -0,0 +1 @@ +#import "a1.h" diff --git a/test/Modules/Inputs/self-import-header/af.framework/module.map b/test/Modules/Inputs/self-import-header/af.framework/module.map new file mode 100644 index 000000000000..87176831df2d --- /dev/null +++ b/test/Modules/Inputs/self-import-header/af.framework/module.map @@ -0,0 +1,4 @@ +framework module af { + header "a1.h" + header "a2.h" +} diff --git a/test/Modules/Inputs/self-import-header/depend_builtin/h1.h b/test/Modules/Inputs/self-import-header/depend_builtin/h1.h new file mode 100644 index 000000000000..13298efce877 --- /dev/null +++ b/test/Modules/Inputs/self-import-header/depend_builtin/h1.h @@ -0,0 +1 @@ +#include <float.h> diff --git a/test/Modules/Inputs/self-import-header/depend_builtin/module.map b/test/Modules/Inputs/self-import-header/depend_builtin/module.map new file mode 100644 index 000000000000..a736ad85c136 --- /dev/null +++ b/test/Modules/Inputs/self-import-header/depend_builtin/module.map @@ -0,0 +1,5 @@ +module DepBuiltin { +header "h1.h" + export * +} + diff --git a/test/Modules/Inputs/stress1/common.h b/test/Modules/Inputs/stress1/common.h new file mode 100644 index 000000000000..b52520ee8f55 --- /dev/null +++ b/test/Modules/Inputs/stress1/common.h @@ -0,0 +1,74 @@ +#ifndef STRESS1_COMMON_H +#define STRESS1_COMMON_H + +inline char function00(char x) { return x + x; } +inline short function00(short x) { return x + x; } +inline int function00(int x) { return x + x; } + +namespace N01 { struct S00; } + +namespace N00 { +struct S00 { + char c; + short s; + int i; + + S00(char x) : c(x) {} + S00(short x) : s(x) {} + S00(int x) : i(x) {} + + char method00(char x) { return x + x; } + short method00(short x) { return x + x; } + int method00(int x) { return x + x; } + + operator char() { return c; } + operator short() { return s; } + operator int() { return i; } +}; +struct S01 {}; +struct S02 {}; +template <typename T> struct S03 { + struct S00 : N00::S00 {}; +}; +template <int I, template <typename> class U> struct S03<U<int>[I]> + : U<int>::S00 { + S03(); + S03(int); + S03(short); + S03(char); + template <typename V = decltype(I)> S03(V); +}; +template <> struct S03<S03<int>[42]> : S00 {}; +} + +namespace N01 { +struct S00 : N00::S00 { + using N00::S00::S00; +}; +struct S01 {}; +struct S02 {}; +} + +using namespace N00; + +template <int I, template <typename> class U> template <typename V> S03<U<int>[I]>::S03(V x) : S00(x) {} +template <int I, template <typename> class U> S03<U<int>[I]>::S03() : S00(I) {} +template <int I, template <typename> class U> S03<U<int>[I]>::S03(char x) : S00(x) {} +template <int I, template <typename> class U> S03<U<int>[I]>::S03(short x) : S00(x) {} +template <int I, template <typename> class U> S03<U<int>[I]>::S03(int x) : S00(x) {} + +#pragma weak pragma_weak00 +#pragma weak pragma_weak01 +#pragma weak pragma_weak02 +#pragma weak pragma_weak03 +#pragma weak pragma_weak04 +#pragma weak pragma_weak05 + +extern "C" int pragma_weak00(); +extern "C" int pragma_weak01(); +extern "C" int pragma_weak02(); +extern "C" int pragma_weak03; +extern "C" int pragma_weak04; +extern "C" int pragma_weak05; + +#endif diff --git a/test/Modules/Inputs/stress1/m00.h b/test/Modules/Inputs/stress1/m00.h new file mode 100644 index 000000000000..ca5af38f58ce --- /dev/null +++ b/test/Modules/Inputs/stress1/m00.h @@ -0,0 +1,6 @@ +#ifndef STRESS1_M00_H +#define STRESS1_M00_H + +#include "common.h" + +#endif diff --git a/test/Modules/Inputs/stress1/m01.h b/test/Modules/Inputs/stress1/m01.h new file mode 100644 index 000000000000..23a3d4b289f6 --- /dev/null +++ b/test/Modules/Inputs/stress1/m01.h @@ -0,0 +1,10 @@ +#ifndef STRESS1_M01_H +#define STRESS1_M01_H + +#include "common.h" + +// Trigger the use of special members for a class this is also defined in other +// modules. +inline N00::S01 m01_special_members() { return N00::S01(); } + +#endif diff --git a/test/Modules/Inputs/stress1/m02.h b/test/Modules/Inputs/stress1/m02.h new file mode 100644 index 000000000000..bb9714ff7471 --- /dev/null +++ b/test/Modules/Inputs/stress1/m02.h @@ -0,0 +1,6 @@ +#ifndef STRESS1_M02_H +#define STRESS1_M02_H + +#include "common.h" + +#endif diff --git a/test/Modules/Inputs/stress1/m03.h b/test/Modules/Inputs/stress1/m03.h new file mode 100644 index 000000000000..b6dbb68ccd53 --- /dev/null +++ b/test/Modules/Inputs/stress1/m03.h @@ -0,0 +1,6 @@ +#ifndef STRESS1_M03_H +#define STRESS1_M03_H + +#include "common.h" + +#endif diff --git a/test/Modules/Inputs/stress1/merge00.h b/test/Modules/Inputs/stress1/merge00.h new file mode 100644 index 000000000000..46d5e4138279 --- /dev/null +++ b/test/Modules/Inputs/stress1/merge00.h @@ -0,0 +1,30 @@ +#ifndef STRESS1_MERGE00_H +#define STRESS1_MERGE00_H + +// These don't match the imported declarations because we import them from +// modules which are built in isolation of the current header's pragma state +// much like they are built in isolation of the incoming macro state. +// FIXME: We should expect warnings here but we can't because verify doesn't +// work for modules. +//#pragma weak pragma_weak01 // expected-warning {{weak identifier 'pragma_weak01' never declared}} +//#pragma weak pragma_weak04 // expected-warning {{weak identifier 'pragma_waek04' never declared}} + +#include "common.h" +#include "m00.h" +#include "m01.h" +#include "m02.h" +#include "m03.h" + +inline int g() { return N00::S00('a').method00('b') + (int)S00(42) + function00(42); } + +// Use implicit special memebers again for S01 to ensure that we merge them in +// successfully from m01. +inline N00::S01 h() { return N00::S01(); } + +#pragma weak pragma_weak02 +#pragma weak pragma_weak05 + +extern "C" int pragma_weak02(); +int pragma_weak05; + +#endif diff --git a/test/Modules/Inputs/stress1/module.modulemap b/test/Modules/Inputs/stress1/module.modulemap new file mode 100644 index 000000000000..2b687b015215 --- /dev/null +++ b/test/Modules/Inputs/stress1/module.modulemap @@ -0,0 +1,6 @@ +module m00 { header "Inputs/stress1/m00.h" export * } +module m01 { header "Inputs/stress1/m01.h" export * } +module m02 { header "Inputs/stress1/m02.h" export * } +module m03 { header "Inputs/stress1/m03.h" export * } + +module merge00 { header "Inputs/stress1/merge00.h" export * } diff --git a/test/Modules/Inputs/submodule-visibility/a.h b/test/Modules/Inputs/submodule-visibility/a.h new file mode 100644 index 000000000000..d8805c92f24d --- /dev/null +++ b/test/Modules/Inputs/submodule-visibility/a.h @@ -0,0 +1 @@ +int n; diff --git a/test/Modules/Inputs/submodule-visibility/b.h b/test/Modules/Inputs/submodule-visibility/b.h new file mode 100644 index 000000000000..fa419c0c5c48 --- /dev/null +++ b/test/Modules/Inputs/submodule-visibility/b.h @@ -0,0 +1 @@ +int m = n; diff --git a/test/Modules/Inputs/submodule-visibility/cycle1.h b/test/Modules/Inputs/submodule-visibility/cycle1.h new file mode 100644 index 000000000000..05e85aef10d8 --- /dev/null +++ b/test/Modules/Inputs/submodule-visibility/cycle1.h @@ -0,0 +1,8 @@ +#ifndef CYCLE1 +#define CYCLE1 + +#include "cycle2.h" + +struct C1 {}; + +#endif diff --git a/test/Modules/Inputs/submodule-visibility/cycle2.h b/test/Modules/Inputs/submodule-visibility/cycle2.h new file mode 100644 index 000000000000..de9fd8e01aaf --- /dev/null +++ b/test/Modules/Inputs/submodule-visibility/cycle2.h @@ -0,0 +1,8 @@ +#ifndef CYCLE2 +#define CYCLE2 + +#include "cycle1.h" + +struct C2 {}; + +#endif diff --git a/test/Modules/Inputs/submodule-visibility/module.modulemap b/test/Modules/Inputs/submodule-visibility/module.modulemap new file mode 100644 index 000000000000..2e13344dc635 --- /dev/null +++ b/test/Modules/Inputs/submodule-visibility/module.modulemap @@ -0,0 +1,6 @@ +module x { module a { header "a.h" } module b { header "b.h" } } + +module cycles { + module cycle1 { header "cycle1.h" } + module cycle2 { header "cycle2.h" } +} diff --git a/test/Modules/Inputs/submodules-merge-defs/defs.h b/test/Modules/Inputs/submodules-merge-defs/defs.h new file mode 100644 index 000000000000..68b57a4a62fe --- /dev/null +++ b/test/Modules/Inputs/submodules-merge-defs/defs.h @@ -0,0 +1,48 @@ +struct A { int a_member; }; +inline int use_a(A a) { return a.a_member; } + +class B { + struct Inner1 {}; +public: + struct Inner2; + template<typename T> void f(); +}; +// Check that lookup and access checks are performed in the right context. +struct B::Inner2 : Inner1 {}; +template<typename T> void B::f() {} + +// Check that base-specifiers are correctly disambiguated. +template<int N> struct C_Base { struct D { constexpr operator int() const { return 0; } }; }; +const int C_Const = 0; +struct C1 : C_Base<C_Base<0>::D{}> {} extern c1; +struct C2 : C_Base<C_Const<0>::D{} extern c2; + +typedef struct { int a; void f(); struct X; } D; +struct D::X { int dx; } extern dx; +inline int use_dx(D::X dx) { return dx.dx; } + +template<typename T> int E(T t) { return t; } + +template<typename T> struct F { + int f(); + template<typename U> int g(); + static int n; +}; +template<typename T> int F<T>::f() { return 0; } +template<typename T> template<typename U> int F<T>::g() { return 0; } +template<typename T> int F<T>::n = 0; +template<> template<typename U> int F<char>::g() { return 0; } +template<> struct F<void> { int h(); }; +inline int F<void>::h() { return 0; } +template<typename T> struct F<T *> { int i(); }; +template<typename T> int F<T*>::i() { return 0; } + +namespace G { + enum A { a, b, c, d, e }; + enum { f, g, h }; + typedef enum { i, j } k; + typedef enum {} l; +} + +template<typename T = int, int N = 3, template<typename> class K = F> int H(int a = 1); +template<typename T = int, int N = 3, template<typename> class K = F> using I = decltype(H<T, N, K>()); diff --git a/test/Modules/Inputs/submodules-merge-defs/empty.h b/test/Modules/Inputs/submodules-merge-defs/empty.h new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/test/Modules/Inputs/submodules-merge-defs/empty.h diff --git a/test/Modules/Inputs/submodules-merge-defs/import-and-redefine.h b/test/Modules/Inputs/submodules-merge-defs/import-and-redefine.h new file mode 100644 index 000000000000..8d695bc45f4d --- /dev/null +++ b/test/Modules/Inputs/submodules-merge-defs/import-and-redefine.h @@ -0,0 +1,5 @@ +// Trigger import of definitions, but don't make them visible. +#include "empty.h" + +// Now parse the definitions again. +#include "defs.h" diff --git a/test/Modules/Inputs/submodules-merge-defs/merged-defs.h b/test/Modules/Inputs/submodules-merge-defs/merged-defs.h new file mode 100644 index 000000000000..31c69c6a447d --- /dev/null +++ b/test/Modules/Inputs/submodules-merge-defs/merged-defs.h @@ -0,0 +1 @@ +#include "defs.h" diff --git a/test/Modules/Inputs/submodules-merge-defs/module.modulemap b/test/Modules/Inputs/submodules-merge-defs/module.modulemap new file mode 100644 index 000000000000..82abdb088f19 --- /dev/null +++ b/test/Modules/Inputs/submodules-merge-defs/module.modulemap @@ -0,0 +1,16 @@ +module "stuff" { + textual header "defs.h" + module "empty" { header "empty.h" } + module "use" { header "use-defs.h" } +} + +module "redef" { + header "import-and-redefine.h" + // Do not re-export stuff.use + use "stuff" +} + +module "merged-defs" { + header "merged-defs.h" + use "stuff" +} diff --git a/test/Modules/Inputs/submodules-merge-defs/use-defs.h b/test/Modules/Inputs/submodules-merge-defs/use-defs.h new file mode 100644 index 000000000000..31c69c6a447d --- /dev/null +++ b/test/Modules/Inputs/submodules-merge-defs/use-defs.h @@ -0,0 +1 @@ +#include "defs.h" diff --git a/test/Modules/Inputs/update-exception-spec/a.h b/test/Modules/Inputs/update-exception-spec/a.h new file mode 100644 index 000000000000..078ebf9aecf7 --- /dev/null +++ b/test/Modules/Inputs/update-exception-spec/a.h @@ -0,0 +1,2 @@ +struct A { ~A() throw(int); }; +struct B { A a; }; diff --git a/test/Modules/Inputs/update-exception-spec/b.h b/test/Modules/Inputs/update-exception-spec/b.h new file mode 100644 index 000000000000..f75b559bee43 --- /dev/null +++ b/test/Modules/Inputs/update-exception-spec/b.h @@ -0,0 +1,3 @@ +struct A { ~A() throw(int); }; +struct B { A a; }; +inline void f(B *p) { p->~B(); } diff --git a/test/Modules/Inputs/update-exception-spec/c.h b/test/Modules/Inputs/update-exception-spec/c.h new file mode 100644 index 000000000000..067dbb650556 --- /dev/null +++ b/test/Modules/Inputs/update-exception-spec/c.h @@ -0,0 +1,3 @@ +#include "a.h" +#include "b.h" +inline void g(B *p) { p->~B(); } diff --git a/test/Modules/Inputs/update-exception-spec/module.modulemap b/test/Modules/Inputs/update-exception-spec/module.modulemap new file mode 100644 index 000000000000..880ae38b97a0 --- /dev/null +++ b/test/Modules/Inputs/update-exception-spec/module.modulemap @@ -0,0 +1,3 @@ +module a { header "a.h" } +module b { header "b.h" } +module c { header "c.h" } |
