https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83557

--- Comment #3 from m68k <x37a5709 at gmail dot com> ---
Thanks for the feedback of this forgotten/unexpected behavior.

The funny part of this is, that the rules are not easy to adopt
see what printf("%c\r\n", 'A');

    5                  .LC1:
    6 0002 25630D0A         .string    "%c\r\n" <--printf("%c\r\n", 'A');
    6      00
HERE \n is maintained, not taking into account puts behavior!!


\n is also maintained in some semantic wrong but syntax correct statement
see and compare:

printf("\r\n");   with     printf("\r\n", ' ');

    3                  .LC0:
    4 0000 0D00             .string    "\r" <---printf("\r\n");
    5                  .LC1:
    6 0002 0D0A00           .string    "\r\n" <---printf("\r\n", ' ');



and \n is also maintained when \n not at the end of a string
see what printf("\n\r");  brings

   11                  .LC4:
   12 000d 0A0D00           .string    "\n\r" <---printf("\n\r)");






On 12/22/2017 04:57 PM, pinskia at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83557
>
> Andrew Pinski <pinskia at gcc dot gnu.org> changed:
>
>             What    |Removed                     |Added
> ----------------------------------------------------------------------------
>               Status|UNCONFIRMED                 |RESOLVED
>           Resolution|---                         |INVALID
>
> --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
> printf("\r\n");
>
> Gets converted into puts("\r");  as allowed by the C standard.  The C standard
> says \n is a new line and puts will put a newline marker on the stdout.
>
> If you don't want this conversion use -fno-builtins, -fno-builtin-printf,
> -ffree-standing (I think that is the option name).
>

Reply via email to