On Wed, 8 Jun 2016, Jason Merrill wrote:

> On Wed, Jun 8, 2016 at 11:16 AM, Marc Glisse <marc.gli...@inria.fr> wrote:
> > On Wed, 8 Jun 2016, Richard Biener wrote:
> >
> >> The following works around PR70992 but the issue came up repeatedly
> >> that we are not very consistent in preserving the undefined behavior
> >> of division or modulo by zero.  Ok - the only inconsistency is
> >> that we fold 0 % x to 0 but not 0 % 0 (with literal zero).
> >>
> >> After folding is now no longer done early in the C family FEs the
> >> number of diagnostic regressions with the patch below is two.
> >>
> >> FAIL: g++.dg/cpp1y/constexpr-sfinae.C  -std=c++14 (test for excess errors)
> 
> Yep. We don't want to fold away undefined behavior in a constexpr
> function, since constexpr evaluation wants to detect undefined
> behavior and treat the expression as non-constant in that case.

Hmm.  So 0 / x is not constant because x might be zero but 0 * x is
constant because it can never invoke undefined behavior?  Does this mean
that 0 << n is not const because n might be too large (I suppose
0 << 12000 is not const already)?  Is 0 * (-x) const?  x might be INT_MIN.

So can you clarify on "We don't want to fold away undefined behavior
in a constexpr"?

Thanks,
Richard.

Reply via email to