[Bug c++/88335] Implement P1073R3, C++20 immediate functions (consteval).
jason at redhat dot com
gcc-bugzilla@gcc.gnu.org
Fri Dec 13 05:47:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88335
--- Comment #15 from Jason Merrill <jason at redhat dot com> ---
On 11/28/19 12:58 PM, jakub at gcc dot gnu.org wrote:
> Now, the issues:
> 1) (so far ignored); the standard says that classes where all virtual members are immediate are still polymorphic,
> but I guess for the ABI we don't want a vtable pointer there. So, I think we want TYPE_POLYMORPHIC_P set on
> those, but e.g. TYPE_CONTAINS_VPTR_P probably shouldn't be true for them; do we want TYPE_REALLY_POLYMORPHIC_P or
> similar for polymorphic types that contain at least one non-immediate virtual function and thus need a vtable?
We still need a vtable for typeinfo, so I think we don't need to worry
about this.
> 2) initially I thought I'd just always emit a direct call to the immediate
> virtual method found by lookup and do the remapping of that during constexpr call evaluation; unfortunately as the
> v->S::bar () etc. calls show, we only want to do that if LOOKUP_NONVIRTUAL wasn't set; unfortunately, when immediate
> functions aren't in the binfo structures, DECL_VINDEX is error_mark_node and so I think we need some hack how to
> preserve the info that we are going to call a virtual consteval method; could we e.g. abuse OBJ_TYPE_REF with
> different arguments that would make it clear it is something different, or new tree? We need to store the instance
> on which it is called and the virtual consteval method originally chosen e.g. to compare the type
> 3) I'm afraid one can't use a lookup_member on the actual instance type, because it could find all kinds of things,
> static member functions, typedefs, data members etc. in derived classes, where we actually are only interested in
> in virtual methods. So, shall we use something like look_for_overrides does, except with the fndecl from the
> base rather than derived and of course don't do anything except return the first found method (and ignore static member
> functions rather than handling them)?
Would it work to include them at the end of BINFO_VIRTUALS but omit them
in build_vtbl_initializer?
> 4) guess covariant returns need to be handled at the end too somehow
Yep.
Jason
More information about the Gcc-bugs
mailing list