diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-01-05 13:50:40 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2020-01-05 13:50:40 +0100 |
commit | 39bec8cd35fa035aa10ddb123eb8a5715d323457 (patch) | |
tree | 2c53f7c315490272f70e8cfdffd5f28d5743572b /gcc/cp | |
parent | 5205a4456b555b5b123ee3ec759e5c74dbd01057 (diff) | |
download | gcc-39bec8cd35fa035aa10ddb123eb8a5715d323457.zip gcc-39bec8cd35fa035aa10ddb123eb8a5715d323457.tar.gz gcc-39bec8cd35fa035aa10ddb123eb8a5715d323457.tar.bz2 |
re PR c++/93138 (elaborated type specifier visibility check problem)
PR c++/93138
* parser.c (cp_parser_check_class_key): Disable access checks for the
simple name lookup.
(cp_parser_maybe_warn_enum_key): Likewise. Return early if
!warn_redundant_tags.
* g++.dg/warn/Wredundant-tags-2.C: New test.
From-SVN: r279886
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/parser.c | 10 |
2 files changed, 16 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a1fb787..3e5f58c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2020-01-05 Jakub Jelinek <jakub@redhat.com> + + PR c++/93138 + * parser.c (cp_parser_check_class_key): Disable access checks for the + simple name lookup. + (cp_parser_maybe_warn_enum_key): Likewise. Return early if + !warn_redundant_tags. + 2010-01-05 Jakub Jelinek <jakub@redhat.com> PR c++/93046 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index a637a28..7cd8e15 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -30663,11 +30663,15 @@ static void cp_parser_maybe_warn_enum_key (cp_parser *parser, location_t key_loc, tree type, rid scoped_key) { + if (!warn_redundant_tags) + return; + tree type_decl = TYPE_MAIN_DECL (type); tree name = DECL_NAME (type_decl); - /* Look up the NAME to see if it unambiguously refers to the TYPE - and set KEY_REDUNDANT if so. */ + /* Look up the NAME to see if it unambiguously refers to the TYPE. */ + push_deferring_access_checks (dk_no_check); tree decl = cp_parser_lookup_name_simple (parser, name, input_location); + pop_deferring_access_checks (); /* The enum-key is redundant for uses of the TYPE that are not declarations and for which name lookup returns just the type @@ -30837,7 +30841,9 @@ cp_parser_check_class_key (cp_parser *parser, location_t key_loc, tree name = DECL_NAME (type_decl); /* Look up the NAME to see if it unambiguously refers to the TYPE and set KEY_REDUNDANT if so. */ + push_deferring_access_checks (dk_no_check); tree decl = cp_parser_lookup_name_simple (parser, name, input_location); + pop_deferring_access_checks (); /* The class-key is redundant for uses of the CLASS_TYPE that are neither definitions of it nor declarations, and for which name |