diff options
author | Nathan Sidwell <nathan@acm.org> | 2018-09-18 13:52:30 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2018-09-18 13:52:30 +0000 |
commit | 3897f13410436e256d6391e2f0b9e02544b6cd91 (patch) | |
tree | b5f06ac37233a6fa0938509b43551619bae9f31c /gcc | |
parent | 0dce552628246d6ce0372772f3ddfa11444ad09d (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/name-lookup.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/pr86881.C | 20 |
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 *-*-* } } + }; +} |