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:
parent
5205a4456b
commit
39bec8cd35
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
18
gcc/testsuite/g++.dg/warn/Wredundant-tags-2.C
Normal file
18
gcc/testsuite/g++.dg/warn/Wredundant-tags-2.C
Normal 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" }
|
Loading…
Reference in New Issue
Block a user