Thanks a lot. That "solves" it for me. (I knew skipping the preprocessor
parts in the standard would come back to bite me one day :D)

Regards, Petr Skocik



On Wed, May 23, 2018 at 11:18 PM, Ramsay Jones <[email protected]>
wrote:

>
>
> On 23/05/18 12:34, Petr Skočík wrote:
> > I don't know if the page is still relevant to this project but
> > I've posted a simpler and hopefully clearer report on this
> > bug at: https://savannah.nongnu.org/bugs/?group=tinycc
> >
> > I'm reposting here:
> >
> > #if-block bodies, when expanded as macro arguments, incorrect if #if
> argument has a macro in it
> >
> > Example:
> >
> > #define PASTE_X(X) X
> >
> > PASTE_X(
> > BEFORE:
> > #if HAS_X   //same for e.g.: 1*HAS_X+0+2
> > int x; //this gets replaced by the value of HAS_X
> > #endif
> > AFTER:
> > )
> >
> > (Compile with e.g., tcc -DHAS_X=42 c.c. The output is then `42` instead
> of `BEFORE: int x; AFTER:` )
> >
> > This bug only affects expanded #if-blocks -- if the block isn't passed
> to a macro (variadic or not)
> > it expands OK.
>
> Hmm, I don't think this is a bug - its simply undefined
> behaviour. From the C99 standard, 6.10.3 Macro replacement,
> sub-paragraph 11:
>
>   "The sequence of preprocessing tokens bounded by the outside-most
> matching parentheses
>   forms the list of arguments for the function-like macro. The individual
> arguments within
>   the list are separated by comma preprocessing tokens, but comma
> preprocessing tokens
>   between matching inner parentheses do not separate arguments. If there
> are sequences of
>   preprocessing tokens within the list of arguments that would otherwise
> act as
>   preprocessing directives, the behavior is undefined."
>
> > If the macro inside the argument to the #if is preceeded by `defined` or
> enclosed in `defined()`,
> > the expansion works OK again.
>
> Hmm, that may be a little odd, but is an allowed implementation.
>
> ATB,
> Ramsay Jones
>
>
>
>
> _______________________________________________
> Tinycc-devel mailing list
> [email protected]
> https://lists.nongnu.org/mailman/listinfo/tinycc-devel
>
_______________________________________________
Tinycc-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to