mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-12 13:11:48 +08:00
[C++ PATCH] vfunc overrider simplification
https://gcc.gnu.org/ml/gcc-patches/2019-08/msg01674.html cp/ * class.c (check_for_overrides): Conversion operators need checking too. testsuite/ * g++.dg/inherit/virtual14.C: New. From-SVN: r274903
This commit is contained in:
parent
e68a35ae4a
commit
6dfc1e1f33
@ -1,13 +1,18 @@
|
||||
2019-08-24 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* class.c (check_for_overrides): Conversion operators need
|
||||
checking too.
|
||||
|
||||
2019-08-24 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* semantics.c (finish_switch_cond): Improve error message location.
|
||||
|
||||
2019-08-22 Jason Merrill <jason@redhat.com>
|
||||
2019-08-23 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* decl2.c (decl_dependent_p): New.
|
||||
(mark_used): Check it instead of just processing_template_decl.
|
||||
|
||||
2019-08-22 Jason Merrill <jason@redhat.com>
|
||||
2019-08-23 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* parser.c (cp_parser_nested_name_specifier_opt): Avoid redundant
|
||||
error.
|
||||
|
@ -2817,10 +2817,12 @@ check_for_override (tree decl, tree ctype)
|
||||
return;
|
||||
|
||||
/* IDENTIFIER_VIRTUAL_P indicates whether the name has ever been
|
||||
used for a vfunc. That avoids the expensive
|
||||
look_for_overrides call that when we know there's nothing to
|
||||
find. */
|
||||
if (IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
|
||||
used for a vfunc. That avoids the expensive look_for_overrides
|
||||
call that when we know there's nothing to find. As conversion
|
||||
operators for the same type can have distinct identifiers, we
|
||||
cannot optimize those in that way. */
|
||||
if ((IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
|
||||
|| DECL_CONV_FN_P (decl))
|
||||
&& look_for_overrides (ctype, decl)
|
||||
/* Check staticness after we've checked if we 'override'. */
|
||||
&& !DECL_STATIC_FUNCTION_P (decl))
|
||||
|
@ -1,3 +1,7 @@
|
||||
2019-08-24 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* g++.dg/inherit/virtual14.C: New.
|
||||
|
||||
2019-08-24 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/91390
|
||||
|
24
gcc/testsuite/g++.dg/inherit/virtual14.C
Normal file
24
gcc/testsuite/g++.dg/inherit/virtual14.C
Normal file
@ -0,0 +1,24 @@
|
||||
// { dg-do run }
|
||||
|
||||
struct base
|
||||
{
|
||||
virtual operator int () { return 0;}
|
||||
};
|
||||
|
||||
typedef int q;
|
||||
|
||||
struct d : base
|
||||
{
|
||||
operator q () { return 1; }
|
||||
};
|
||||
|
||||
int invoke (base *d)
|
||||
{
|
||||
return int (*d);
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
d d;
|
||||
return !(invoke (&d) == 1);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user