When deserializing an anonymous namespace from a module, do not attach
the anonymous namespace to its parent. Semantically, this means that
the anonymous namespaces defined in one module are distinct from the
anonymous namespaces defined in another module.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147782 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Modules/Inputs/namespaces-left.h b/test/Modules/Inputs/namespaces-left.h
index ea2ae2b..7e9002a 100644
--- a/test/Modules/Inputs/namespaces-left.h
+++ b/test/Modules/Inputs/namespaces-left.h
@@ -37,3 +37,17 @@
 namespace N10 {
   int &f(int);
 }
+
+namespace N11 {
+  namespace {
+    class Foo;
+  }
+  Foo *getFoo();
+}
+
+namespace N12 {
+  namespace {
+    class Foo;
+  }
+  Foo *getFoo();
+}
diff --git a/test/Modules/Inputs/namespaces-right.h b/test/Modules/Inputs/namespaces-right.h
index d103c00..b18aeb4 100644
--- a/test/Modules/Inputs/namespaces-right.h
+++ b/test/Modules/Inputs/namespaces-right.h
@@ -39,3 +39,23 @@
 namespace N10 {
   int &f(int);
 }
+
+
+
+
+
+
+
+namespace N11 {
+  namespace {
+    class Foo;
+  }
+  void consumeFoo(Foo*);
+}
+
+namespace N12 {
+  namespace {
+    class Foo;
+  }
+  void consumeFoo(Foo*);
+}
diff --git a/test/Modules/Inputs/namespaces-top.h b/test/Modules/Inputs/namespaces-top.h
index a69f43f..0c607f5 100644
--- a/test/Modules/Inputs/namespaces-top.h
+++ b/test/Modules/Inputs/namespaces-top.h
@@ -9,3 +9,6 @@
 namespace N3 { 
   int& f(int);
 }
+
+namespace N12 { }
+
diff --git a/test/Modules/namespaces.cpp b/test/Modules/namespaces.cpp
index 9ef966a..b60f75c 100644
--- a/test/Modules/namespaces.cpp
+++ b/test/Modules/namespaces.cpp
@@ -47,3 +47,14 @@
   int &ir2 = N9::f(17);
   int &ir3 = N10::f(17);
 }
+
+// Test merging when using anonymous namespaces, which does not
+// actually perform any merging.
+// other file: expected-note{{passing argument to parameter here}}
+void testAnonymousNotMerged() {
+  N11::consumeFoo(N11::getFoo()); // expected-error{{cannot initialize a parameter of type 'N11::<anonymous>::Foo *' with an rvalue of type 'N11::<anonymous>::Foo *'}}
+  N12::consumeFoo(N12::getFoo()); // expected-error{{cannot initialize a parameter of type 'N12::<anonymous>::Foo *' with an rvalue of type 'N12::<anonymous>::Foo *'}}  
+}
+
+
+// other file: expected-note{{passing argument to parameter here}}