aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2018-09-18 13:52:30 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2018-09-18 13:52:30 +0000
commit3897f13410436e256d6391e2f0b9e02544b6cd91 (patch)
treeb5f06ac37233a6fa0938509b43551619bae9f31c /gcc
parent0dce552628246d6ce0372772f3ddfa11444ad09d (diff)
downloadgcc-3897f13410436e256d6391e2f0b9e02544b6cd91.zip
gcc-3897f13410436e256d6391e2f0b9e02544b6cd91.tar.gz
gcc-3897f13410436e256d6391e2f0b9e02544b6cd91.tar.bz2
[PATCH c++/86881] -Wshadow-local-compatible ICE
https://gcc.gnu.org/ml/gcc-patches/2018-09/msg00984.html PR c++/86881 cp/ * name-lookup.c (check_local_shadow): Ignore auto types. testsuite/ * g++.dg/warn/pr86881.C: New. From-SVN: r264391
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/name-lookup.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/pr86881.C20
4 files changed, 37 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index cec08bf..f73ea2a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2018-09-18 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/86881
+ * name-lookup.c (check_local_shadow): Ignore auto types.
+
2018-09-17 David Malcolm <dmalcolm@redhat.com>
* error.c (range_label_for_type_mismatch::get_text): Update for
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index bb0a70e..c56bfe5 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -2764,6 +2764,13 @@ check_local_shadow (tree decl)
&& (same_type_p (TREE_TYPE (old), TREE_TYPE (decl))
|| (!dependent_type_p (TREE_TYPE (decl))
&& !dependent_type_p (TREE_TYPE (old))
+ /* If the new decl uses auto, we don't yet know
+ its type (the old type cannot be using auto
+ at this point, without also being
+ dependent). This is an indication we're
+ (now) doing the shadow checking too
+ early. */
+ && !type_uses_auto (TREE_TYPE (decl))
&& can_convert (TREE_TYPE (old), TREE_TYPE (decl),
tf_none))))
warning_code = OPT_Wshadow_compatible_local;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6b41c68..d1bc09f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-09-18 Nathan Sidwell <nathan@acm.org>
+
+ PR c++/86881
+ * g++.dg/warn/pr86881.C: New.
+
2018-09-18 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/aarch64/spellcheck_1.c:
diff --git a/gcc/testsuite/g++.dg/warn/pr86881.C b/gcc/testsuite/g++.dg/warn/pr86881.C
new file mode 100644
index 0000000..4fc8d56
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/pr86881.C
@@ -0,0 +1,20 @@
+// PR c++/86881 ICE with shadow warning
+// { dg-do compile { c++11 } }
+// { dg-additional-options { -Wshadow-compatible-local } }}
+
+void a() {
+ auto b([] {});
+ {
+ auto b = 0;
+ }
+}
+
+struct Proxy { };
+
+void Two ()
+{
+ auto my = Proxy ();
+ {
+ auto my = Proxy (); // { dg-warning "shadows" "" { xfail *-*-* } }
+ };
+}