On Fri, 13 Jan 2017, Jakub Jelinek wrote:

> On Fri, Jan 13, 2017 at 09:15:22AM +0100, Richard Biener wrote:
> > > @@ -1710,6 +1716,24 @@ dump_generic_node (pretty_printer *pp, t
> > >     print_hex (val, pp_buffer (pp)->digit_buffer);
> > >     pp_string (pp, pp_buffer (pp)->digit_buffer);
> > >   }
> > > +      if ((flags & TDF_GIMPLE)
> > > +   && (POINTER_TYPE_P (TREE_TYPE (node))
> > > +       || (TYPE_PRECISION (TREE_TYPE (node))
> > > +           < TYPE_PRECISION (integer_type_node))
> > > +       || exact_log2 (TYPE_PRECISION (TREE_TYPE (node))) == -1))
> > > + {
> > > +   if (TYPE_UNSIGNED (TREE_TYPE (node)))
> > > +     pp_character (pp, 'u');
> > > +   if (TYPE_PRECISION (TREE_TYPE (node))
> > > +       == TYPE_PRECISION (unsigned_type_node))
> > > +     ;
> > > +   else if (TYPE_PRECISION (TREE_TYPE (node))
> > > +            == TYPE_PRECISION (long_unsigned_type_node))
> > > +     pp_character (pp, 'l');
> > > +   else if (TYPE_PRECISION (TREE_TYPE (node))
> > > +            == TYPE_PRECISION (long_long_unsigned_type_node))
> > > +     pp_string (pp, "ll");
> > > + }
> 
> Not sure if I understand this.  The outer if condition says that only the
> sub-int or strange precision or pointer types do that, but then
> you compare the precisions against long and long long.  That will be
> true only for pointers.  Don't you want the u/l/ll/ul/ull suffixes emitted
> for integers even when they have normal precision and _Literal is not used?
> Or is that handled somewhere else?

Oops, you are right - it shouldn't be the same condition that controls
whether to add _Literal (type).  It should be the inverse.  Maybe
we need to add suffixes anyway even for say 61bit precision constants
to avoid warnings from libcpp.

I'll fix it up after testing a few cases.

Richard.

Reply via email to