+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.
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))
+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
--- /dev/null
+// { 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);
+}