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
This commit is contained in:
Jakub Jelinek 2020-01-05 13:50:40 +01:00 committed by Jakub Jelinek
parent 5205a4456b
commit 39bec8cd35
4 changed files with 38 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -1,4 +1,7 @@
2010-01-05 Jakub Jelinek <jakub@redhat.com>
2020-01-05 Jakub Jelinek <jakub@redhat.com>
PR c++/93138
* g++.dg/warn/Wredundant-tags-2.C: New test.
PR c++/93046
* g++.dg/ext/cond4.C: New test.

View File

@ -0,0 +1,18 @@
// PR c++/93138
// { dg-do compile }
// { dg-options "-Wredundant-tags" }
struct Foo
{
enum Kind { a };
private:
Kind Kind;
};
enum Foo::Kind foo (); // { dg-bogus "is private within this context|redundant" }
struct Bar
{
struct Kind { int a; };
private:
Kind Kind;
};
struct Bar::Kind bar (); // { dg-bogus "is private within this context|redundant" }