[C++ Patch/RFC] PR 60047
Paolo Carlini
paolo.carlini@oracle.com
Wed Feb 5 16:19:00 GMT 2014
Hi,
On 02/04/2014 12:51 PM, Paolo Carlini wrote:
> Hi,
>
> thus I tried to have a look to this issue, while experiencing some
> weird problems with the debugger, which slowed me down a lot. I have
> been able to figure out that we don't seem to actively set constexpr_p
> to true anywhere in implicitly_declare_fn (besides the unrelated case
> of inheriting constructors), thus I'm wondering if it would make sense
> to simply do the below?!? (and revert my recent tweak)
I spent a little more time on this. Outside the case of inheriting
constructors and the special case of expected_trivial default
constructors (which are handled in a special conditional), we are
normally assigning true to constexpr_p only in one place, that is close
to the beginning of synthesized_method_walk:
/* If that user-written default constructor would satisfy the
requirements of a constexpr constructor (7.1.5), the
implicitly-defined default constructor is constexpr. */
if (constexpr_p)
*constexpr_p = ctor_p;
then, for the testcase at issue it becomes false in the place which we
already discussed for the ICE:
if (vec_safe_is_empty (vbases))
/* No virtual bases to worry about. */;
else if (!assign_p)
{
if (constexpr_p)
*constexpr_p = false;
Then it doesn't gets a chance to return true. Thus, given the more
accurate analysis, I think that we either do what I quickly proposed
yesterday, or alternately, the only option I can see, we change
process_subob_fn to set it to true in some cases (but I note that it
does never set to true trivial_p).
Thanks,
Paolo.
More information about the Gcc-patches
mailing list