aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2017-10-06 16:02:13 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2017-10-06 16:02:13 +0000
commit9db84ecedae899c04ac693d970120a065c58350e (patch)
tree6e6aeb940d2d46d4759c66abf23c8d6b408dabc2
parent7260f6f79cd3aea6580013d386ce0fd8696a6b19 (diff)
downloadgcc-9db84ecedae899c04ac693d970120a065c58350e.zip
gcc-9db84ecedae899c04ac693d970120a065c58350e.tar.gz
gcc-9db84ecedae899c04ac693d970120a065c58350e.tar.bz2
[PR c++/82424] Dont convert dependent types
https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00385.html cp/ PR c++/82424 * name-lookup.c (check_local_shadow): Don't try and convert dependent types. testsuite/ PR c++/82424 * g++.dg/warn/pr82424.C: New. From-SVN: r253496
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/name-lookup.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/pr82424.C20
4 files changed, 36 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ea0e8b6..b2813eb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2017-10-06 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/82424
+ * name-lookup.c (check_local_shadow): Don't try and convert
+ dependent types.
+
2017-10-06 Jakub Jelinek <jakub@redhat.com>
PR c++/82299
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index fb86310..a3da34d 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -2728,7 +2728,11 @@ check_local_shadow (tree decl)
else if (warn_shadow_local)
warning_code = OPT_Wshadow_local;
else if (warn_shadow_compatible_local
- && can_convert (TREE_TYPE (old), TREE_TYPE (decl), tf_none))
+ && (same_type_p (TREE_TYPE (old), TREE_TYPE (decl))
+ || (!dependent_type_p (TREE_TYPE (decl))
+ && !dependent_type_p (TREE_TYPE (old))
+ && can_convert (TREE_TYPE (old), TREE_TYPE (decl),
+ tf_none))))
warning_code = OPT_Wshadow_compatible_local;
else
return;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d7af2a9..97825c3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-10-06 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/82424
+ * g++.dg/warn/pr82424.C: New.
+
2017-10-06 Jakub Jelinek <jakub@redhat.com>
PR c++/82299
diff --git a/gcc/testsuite/g++.dg/warn/pr82424.C b/gcc/testsuite/g++.dg/warn/pr82424.C
new file mode 100644
index 0000000..43dd5e4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/pr82424.C
@@ -0,0 +1,20 @@
+// { dg-additional-options "-Wshadow=compatible-local" }
+
+// pr c++/82424 we were trying to convert between dependent types.
+template <typename T> class a
+{
+ struct b;
+ template <typename, typename> void c ();
+};
+template <typename T>
+template <typename, typename>
+void
+a<T>::c ()
+{
+ typedef typename T::b b; // Don't go looking inside the typename
+ T thing;
+ {
+ T thing; // { dg-warning "shadows a previous local" }
+ }
+}
+