optimizing out string functions when the string contains a NUL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

consider the following program:

#include <stdio.h>

#define HIDDEN "\0this string starts with a NUL"

int main(void)
{
    puts(HIDDEN);
    printf(HIDDEN);

    return 0;
}

AFAICT, the puts and printf are both no-ops, as the C-string stops
before it starts.  yet when doing 'gcc -S tst.c -O2 -march=native' or
even 'gcc -S tst.c -O3 -march=native', GCC generates the following:

        .file   "tst.c"
        .section        .rodata
        .align 8
.LC0:
        .string ""
        .string "this string starts with a NUL"
        .section        .text.startup,"ax",@progbits
        .p2align 4,,15
        .globl  main
        .type   main, @function
main:
.LFB11:
        .cfi_startproc
        subq    $8, %rsp
        .cfi_def_cfa_offset 16
        movl    $.LC0, %edi
        call    puts
        xorl    %eax, %eax
        addq    $8, %rsp
        .cfi_def_cfa_offset 8
        ret
        .cfi_endproc
.LFE11:
        .size   main, .-main
        .ident  "GCC: (GNU) 4.7.1"
        .section        .note.GNU-stack,"",@progbits

in short, the printf was removed but not the puts.  which left me wondering why?

thanks.


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux