[modules] libstdc++ defines some static inline functions in its internal
headers. If those headers end up being textually included twice into the same
module, we get ambiguity errors.

Work around this by downgrading the ambiguity error to a warning if multiple
identical internal-linkage functions appear in an overload set, and just pick
one of those functions as the lookup result.

llvm-svn: 250884
diff --git a/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/a.h b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/a.h
new file mode 100644
index 0000000..e079bd0
--- /dev/null
+++ b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/a.h
@@ -0,0 +1,4 @@
+#ifndef A_H
+#define A_H
+static inline void f() {}
+#endif
diff --git a/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/b.h b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/b.h
new file mode 100644
index 0000000..c0a8278
--- /dev/null
+++ b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/b.h
@@ -0,0 +1,4 @@
+#ifndef B_H
+#define B_H
+#include "a.h"
+#endif
diff --git a/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/c.h b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/c.h
new file mode 100644
index 0000000..53122fa
--- /dev/null
+++ b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/c.h
@@ -0,0 +1,4 @@
+#ifndef C_H
+#define C_H
+#include "a.h"
+#endif
diff --git a/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/d.h b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/d.h
new file mode 100644
index 0000000..1627bfb
--- /dev/null
+++ b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/d.h
@@ -0,0 +1,3 @@
+#include "b.h"
+#include "c.h"
+inline void g() { f(); }
diff --git a/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/module.modulemap b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/module.modulemap
new file mode 100644
index 0000000..12d0388
--- /dev/null
+++ b/clang/test/Modules/Inputs/libstdcxx-ambiguous-internal/module.modulemap
@@ -0,0 +1,6 @@
+module std {
+  module A { textual header "a.h" }
+  module B { header "b.h" }
+  module C { header "c.h" }
+  module D { header "d.h" export * }
+}