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>
|
2010-01-05 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR c++/93046
|
PR c++/93046
|
||||||
|
@ -30663,11 +30663,15 @@ static void
|
|||||||
cp_parser_maybe_warn_enum_key (cp_parser *parser, location_t key_loc,
|
cp_parser_maybe_warn_enum_key (cp_parser *parser, location_t key_loc,
|
||||||
tree type, rid scoped_key)
|
tree type, rid scoped_key)
|
||||||
{
|
{
|
||||||
|
if (!warn_redundant_tags)
|
||||||
|
return;
|
||||||
|
|
||||||
tree type_decl = TYPE_MAIN_DECL (type);
|
tree type_decl = TYPE_MAIN_DECL (type);
|
||||||
tree name = DECL_NAME (type_decl);
|
tree name = DECL_NAME (type_decl);
|
||||||
/* Look up the NAME to see if it unambiguously refers to the TYPE
|
/* 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);
|
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
|
/* The enum-key is redundant for uses of the TYPE that are not
|
||||||
declarations and for which name lookup returns just the type
|
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);
|
tree name = DECL_NAME (type_decl);
|
||||||
/* Look up the NAME to see if it unambiguously refers to the TYPE
|
/* Look up the NAME to see if it unambiguously refers to the TYPE
|
||||||
and set KEY_REDUNDANT if so. */
|
and set KEY_REDUNDANT if so. */
|
||||||
|
push_deferring_access_checks (dk_no_check);
|
||||||
tree decl = cp_parser_lookup_name_simple (parser, name, input_location);
|
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
|
/* The class-key is redundant for uses of the CLASS_TYPE that are
|
||||||
neither definitions of it nor declarations, and for which name
|
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
|
PR c++/93046
|
||||||
* g++.dg/ext/cond4.C: New test.
|
* 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…
x
Reference in New Issue
Block a user