On Thu, 12 Jan 2017, Jakub Jelinek wrote: > On Thu, Jan 12, 2017 at 04:38:27PM +0530, Prathamesh Kulkarni wrote: > > On 12 January 2017 at 16:15, Richard Biener <rguent...@suse.de> wrote: > > > On Thu, 12 Jan 2017, Jakub Jelinek wrote: > > > > > >> On Thu, Jan 12, 2017 at 10:52:23AM +0100, Richard Biener wrote: > > >> > > I'll give the (short) 1 parsing a try though to see how awkward it > > >> > > really gets. > > >> > > > >> > Ok, doesn't look a good way to go. Apart from making it difficult > > >> > to handle in the parser you can't distinguish a conversion from an > > >> > integer literal and a short literal for > > >> > > > >> > short s; > > >> > s_1 = (short) 1; > > >> > > >> As there are tons of types the integer literals can have, wouldn't it be > > >> better to just introduce _Literal <type, value> where you could supply > > >> the type if it is not one where C provides a suffix for it or int? > > >> Then we could avoid adding lots of suffixes for new and newer types. > > >> Of course for integer literals with int, unsigned int, {,unsigned} long > > >> {,long} > > >> one would still use no suffix, U, {,U}L{,L} suffixes. > > > > > > That's an interesting idea. _Literal (type) value might be alternative > > > syntax (a cast to be evaulated as literal). I'll give it a shot. > > Um, how about just type(value) ? > > s_1 = short (10); > > AFAIU this isn't legal C and could be added as an extension ? > > Even C++ doesn't allow this syntax if the type isn't a single token. > So you can't use unsigned __int128 (5) or unsigned char (7) or signed char > (-5).
It also lacks expressiveness when comparing short s; s_1 = (short) 1; s_2 = short (1); IMHO having a _Literal somewhere makes it more obvious what is meant (I'm still going to dump 1u or 1l instead of _Literal (unsigned) 1 of course as that's even more easy to recognize). Richard.