On Wed, Aug 1, 2018 at 7:07 PM, Jakub Jelinek <ja...@redhat.com> wrote:
> On Wed, Aug 01, 2018 at 12:35:09AM +1000, Jason Merrill wrote:
>> On Mon, Jul 23, 2018 at 8:50 PM, Richard Biener
>> <richard.guent...@gmail.com> wrote:
>> > On Mon, Jul 23, 2018 at 12:28 PM Jakub Jelinek <ja...@redhat.com> wrote:
>> >>
>> >> On Mon, Jul 23, 2018 at 12:17:42PM +0200, Richard Biener wrote:
>> >> > > Bootstrapped/regtested on x86_64-linux.
>> >> >
>> >> > Thanks for working on this.  I wonder if we can completely hide this
>> >> > from the middle-end, without requiring defining of c_dialect_cxx.
>> >> > There is the BUILT_IN_FRONTEND class so you could somewhere
>> >> > manually inject a decl in that class for C++?
>> >>
>> >> But then I couldn't handle folding of the builtin in the middle-end to 
>> >> false,
>> >> which is what I need (because in the FE it needs to be either folded to
>> >> true, or its folding deferred until later).
>> >> Or maybe in the C++ gimplification langhook?
>> >
>> > Yes, I was thinking the C++ langhook or its fully_fold routine.
>>
>> fully_fold is too soon (until constexpr evaluation uses the
>> pre-genericize form), but the gimplification hook should work.
>>
>> >> Seems we have a single BUILT_IN_FRONTEND builtin in the whole compiler,
>> >> __integer_pack, but it doesn't act as a normal builtin, given it is a
>> >> templatish magic.
>> >
>> > Yeah, I think at some point we considered removing BUILT_IN_FRONTEND ...
>> >
>> > Nowadays internal-use builtins can easily be internal-functions but of 
>> > couse
>> > this one will eventually be used from libstdc++.
>>
>> Immediately, I'd think.
>
> Here is an updated patch that uses BUILT_IN_FRONTEND for this rather than
> BUILT_IN_NORMAL builtin.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux.
>
> 2018-08-01  Jakub Jelinek  <ja...@redhat.com>
>
>         P0595R1 - is_constant_evaluated
> cp/
>         * cp-tree.h (enum cp_built_in_function): New.
>         (maybe_constant_init): Add const_evaluated argument.

We should document that this new parameter (here and in
cxx_eval_outermost_constant_expr) means "required to be
constant-evaluated" as per P0595 even though allow_non_constant is
true.  And the parameter names should make its magical nature more
obvious; perhaps "pretend_const_required".  OK with those changes.

Jason

Reply via email to