diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-08-28 01:33:39 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-08-28 01:33:39 +0000 |
| commit | d08aeb6b57ad30fcc973a1d37f9d08d428b59baa (patch) | |
| tree | 89637b9f6f329d24f8aca2d579fcd380d8513602 /clang/test/Modules | |
| parent | 9fc9bf83a8a51693585cb9f20d73ffd4baa92203 (diff) | |
| download | bcm5719-llvm-d08aeb6b57ad30fcc973a1d37f9d08d428b59baa.tar.gz bcm5719-llvm-d08aeb6b57ad30fcc973a1d37f9d08d428b59baa.zip | |
[modules] Number anonymous declarations that are lexically within mergeable
contexts, so that we can merge them when we merge the surrounding context.
llvm-svn: 216639
Diffstat (limited to 'clang/test/Modules')
| -rw-r--r-- | clang/test/Modules/Inputs/cxx-templates-a.h | 1 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/cxx-templates-b.h | 3 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/cxx-templates-common.h | 7 | ||||
| -rw-r--r-- | clang/test/Modules/cxx-templates.cpp | 5 |
4 files changed, 16 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/cxx-templates-a.h b/clang/test/Modules/Inputs/cxx-templates-a.h index 928a544fc4d..b1ea6a9c241 100644 --- a/clang/test/Modules/Inputs/cxx-templates-a.h +++ b/clang/test/Modules/Inputs/cxx-templates-a.h @@ -87,3 +87,4 @@ template<typename T> struct PartiallyInstantiatePartialSpec<T*> { typedef PartiallyInstantiatePartialSpec<int*> PartiallyInstantiatePartialSpecHelper; void InstantiateWithAliasTemplate(WithAliasTemplate<int>::X<char>); +inline int InstantiateWithAnonymousDeclsA(WithAnonymousDecls<int> x) { return (x.k ? x.a : x.b) + (x.k ? x.s.c : x.s.d); } diff --git a/clang/test/Modules/Inputs/cxx-templates-b.h b/clang/test/Modules/Inputs/cxx-templates-b.h index cfaea282df0..632a55b72e3 100644 --- a/clang/test/Modules/Inputs/cxx-templates-b.h +++ b/clang/test/Modules/Inputs/cxx-templates-b.h @@ -70,6 +70,9 @@ template<> struct MergeSpecializations<double> { template<typename U> using AliasTemplate = U; void InstantiateWithAliasTemplate(WithAliasTemplate<int>::X<char>); +inline int InstantiateWithAnonymousDeclsB(WithAnonymousDecls<int> x) { + return (x.k ? x.a : x.b) + (x.k ? x.s.c : x.s.d); +} @import cxx_templates_a; template<typename T> void UseDefinedInBImplIndirectly(T &v) { diff --git a/clang/test/Modules/Inputs/cxx-templates-common.h b/clang/test/Modules/Inputs/cxx-templates-common.h index d729c6edf4c..f1cf260fb04 100644 --- a/clang/test/Modules/Inputs/cxx-templates-common.h +++ b/clang/test/Modules/Inputs/cxx-templates-common.h @@ -45,4 +45,11 @@ template<typename T> struct WithAliasTemplate { template<typename> using X = T; }; +template<typename T> struct WithAnonymousDecls { + struct { bool k; }; + union { int a, b; }; + struct { int c, d; } s; + typedef int X; +}; + #include "cxx-templates-textual.h" diff --git a/clang/test/Modules/cxx-templates.cpp b/clang/test/Modules/cxx-templates.cpp index d0a6c0f9e5d..b3ef3f6497b 100644 --- a/clang/test/Modules/cxx-templates.cpp +++ b/clang/test/Modules/cxx-templates.cpp @@ -145,6 +145,11 @@ MergeSpecializations<bool>::explicitly_specialized_in_c spec_in_c_2; using AliasTemplateMergingTest = WithAliasTemplate<int>::X<char>; +int AnonymousDeclsMergingTest(WithAnonymousDecls<int> WAD) { + return InstantiateWithAnonymousDeclsA(WAD) + + InstantiateWithAnonymousDeclsB(WAD); +} + @import cxx_templates_common; typedef SomeTemplate<int*> SomeTemplateIntPtr; |

