summaryrefslogtreecommitdiffstats
path: root/clang/test/Modules
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2014-08-28 01:33:39 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2014-08-28 01:33:39 +0000
commitd08aeb6b57ad30fcc973a1d37f9d08d428b59baa (patch)
tree89637b9f6f329d24f8aca2d579fcd380d8513602 /clang/test/Modules
parent9fc9bf83a8a51693585cb9f20d73ffd4baa92203 (diff)
downloadbcm5719-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.h1
-rw-r--r--clang/test/Modules/Inputs/cxx-templates-b.h3
-rw-r--r--clang/test/Modules/Inputs/cxx-templates-common.h7
-rw-r--r--clang/test/Modules/cxx-templates.cpp5
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;
OpenPOWER on IntegriCloud