Modules: Search for a visible definition of the decl context when computing visibility of a default template parameter
The code is/was already correct for the case where a parameter is a
parameter of its enclosing lexical DeclContext (functions and classes).
But for other templates (alias and variable templates) they don't create
their own scope to be members of - in those cases, they parameter should
be considered visible if any definition of the lexical decl context is
visible.
[this should cleanup the failure on the libstdc++ modules buildbot]
[this doesn't actually fix the variable template case for a
secondary/compounding reason (its lexical decl context is incorrectly
considered to be the translation unit)]
Test covers all 4 kinds of templates with default args, including a
regression test for the still broken variable template case.
Reviewers: rsmith
Differential Revision: https://reviews.llvm.org/D60892
llvm-svn: 358795
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/alias.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/alias.h
new file mode 100644
index 0000000..cff3329
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/alias.h
@@ -0,0 +1,7 @@
+#ifndef ALIAS_H
+#define ALIAS_H
+struct alias_outer {
+ template <typename = int>
+ using alias = int;
+};
+#endif
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/alias1.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/alias1.h
new file mode 100644
index 0000000..736abcb
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/alias1.h
@@ -0,0 +1 @@
+#include "alias.h"
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/alias2.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/alias2.h
new file mode 100644
index 0000000..736abcb
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/alias2.h
@@ -0,0 +1 @@
+#include "alias.h"
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/func.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/func.h
new file mode 100644
index 0000000..7a15c69
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/func.h
@@ -0,0 +1,7 @@
+#ifndef FUNC_H
+#define FUNC_H
+struct func_outer {
+ template <typename = int>
+ void func();
+};
+#endif
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/func1.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/func1.h
new file mode 100644
index 0000000..940d767
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/func1.h
@@ -0,0 +1 @@
+#include "func.h"
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/func2.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/func2.h
new file mode 100644
index 0000000..940d767
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/func2.h
@@ -0,0 +1 @@
+#include "func.h"
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/module.modulemap b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/module.modulemap
new file mode 100644
index 0000000..a0071fd
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/module.modulemap
@@ -0,0 +1,24 @@
+module ALIAS1 {
+ header "alias1.h"
+ module ALIAS2 {
+ header "alias2.h"
+ }
+}
+module VAR1 {
+ header "var1.h"
+ module VAR2 {
+ header "var2.h"
+ }
+}
+module FUNC1 {
+ header "func1.h"
+ module FUNC2 {
+ header "func2.h"
+ }
+}
+module STRCT1 {
+ header "strct1.h"
+ module STRCT2 {
+ header "strct2.h"
+ }
+}
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/strct.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/strct.h
new file mode 100644
index 0000000..04d1244
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/strct.h
@@ -0,0 +1,7 @@
+#ifndef STRCT_H
+#define STRCT_H
+struct strct_outer {
+ template <typename = int>
+ struct strct;
+};
+#endif
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/strct1.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/strct1.h
new file mode 100644
index 0000000..5c29b94
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/strct1.h
@@ -0,0 +1 @@
+#include "strct.h"
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/strct2.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/strct2.h
new file mode 100644
index 0000000..5c29b94
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/strct2.h
@@ -0,0 +1 @@
+#include "strct.h"
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/var.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/var.h
new file mode 100644
index 0000000..3c3584d
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/var.h
@@ -0,0 +1,9 @@
+#ifndef VAR_H
+#define VAR_H
+struct var_outer {
+ template <typename = int>
+ static int var;
+};
+#endif
+
+
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/var1.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/var1.h
new file mode 100644
index 0000000..89cee81
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/var1.h
@@ -0,0 +1 @@
+#include "var.h"
diff --git a/clang/test/Modules/Inputs/nested-template-default-arg-redecl/var2.h b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/var2.h
new file mode 100644
index 0000000..89cee81
--- /dev/null
+++ b/clang/test/Modules/Inputs/nested-template-default-arg-redecl/var2.h
@@ -0,0 +1 @@
+#include "var.h"