Joseph S. Myers wrote: > On Fri, 6 Mar 2009, Paolo Bonzini wrote: > >> I don't think you need to introduce trapping tree codes. You can >> introduce them directly in the front-end as > > Multiple front ends want the same thing. This is why it would be better > to introduce the codes in GENERIC and have the language-independent > gimplifier contain the code to lower them, even if they don't become part > of GIMPLE.
I see your point. What I'm worried of, is that this codes would be tested more lightly and, until folding is a middle-end thing only, the risk of unwanted optimization on -ftrapv code would be high. You can have common code shared by front-ends. They could apply it at GENERICization time (Fortran, Ada) or directly while parsing (C, C++). >> (int)((long long) a * (long long) b) == a *nv b ? trap () : a *nv b > > This is not a solution for trapping multiplication in the widest supported > type. There's always range checking, I was pointing out optimization possibilities; the above one can be optimized like (h,l) = a*b if (h != l >> 31) trap (); // signed shift Paolo