On Wed, Aug 1, 2018 at 3:05 PM Bernd Edlinger <bernd.edlin...@hotmail.de> wrote: > > > > On 08/01/18 11:29, Richard Biener wrote: > > > > Hmm. I think it would be nice if TREE_STRING_LENGTH would > > match char[2] and TYPE_SIZE_UNIT even if that is inconvenient > > for your check above. Because the '\0' doesn't belong to the > > string. Then build_string internally appends a '\0' outside > > of TREE_STRING_LENGTH. > > > > Hmm. Yes, but the outside-0 byte is just one byte, not a wide > character.
That could be fixed though (a wide 0 is just N 0s). Add a elsz = 1 parameter to build_string and allocate as many extra 0s as needed. There are STRING_CSTs which are not string literals, > for instance attribute tags, Pragmas, asm constrants, etc. > They use the '\0' outside, and have probably no TREE_TYPE. > > > > >> So I would like to be able to assume that the STRING_CST objects > >> are internally always generated properly by the front end. > > > > Yeah, I guess we need to define what "properly" is ;) > > > Yes. > > >> And that the ARRAY_TYPE of the string literal either has the > >> same length than the TREE_STRING_LENGTH or if it is shorter, > >> this is always exactly one (wide) character size less than > >> TREE_STRING_LENGTH > > > > I think it should be always the same... > > > > One could not differentiate between "\0" without zero-termination > and "" with zero-termination, theoretically. Is that important? Doesn't the C standard say how to parse string literals? > We also have char x[100] = "ab"; > that is TREE_STRING_LENGTH=3, and TYPE_SIZE_UNIT(TREE_TYPE(x)) = 100. > Of course one could create it with a TREE_STRING_LENGTH = 100, > but imagine char x[100000000000] = "ab" The question is more about TYPE_SIZE_UNIT (TREE_TYPE ("ab")) which I hope matches "ab" and not 'x'. If it matches 'x' then I'd rather have it unconditionally be [], thus incomplete (because the literals "size" depends on the context/LHS it is used on). > >> The idea is to use this property of string literals where needed, > >> and check rigorously in varasm.c. > >> > >> Does that make sense? > > > > So if it is not the same then the excess character needs to be > > a (wide) NUL in your model? ISTR your varasm.c patch didn't verify > > that. > > > > I think it does. > > > Bernd.