[ccache] Old code ccache hit always come back unless CCACHE_DISABLE is used

g.esp at free.fr g.esp at free.fr
Tue Jun 5 14:48:48 MDT 2012



----- Mail original -----
> De: "Joel Rosdahl" <joel at rosdahl.net>
> À: "g esp" <g.esp at free.fr>
> Cc: ccache at lists.samba.org
> Envoyé: Samedi 2 Juin 2012 18:29:30
> Objet: Re: [ccache] Old code ccache hit always come back unless CCACHE_DISABLE is used
> 
> On 1 June 2012 12:12,  <g.esp at free.fr> wrote:
> > On the no-fPIE case, using CCACHE_CPP2=1 change compilation to
> > work.
> > Any next recompilation even without CCACHE_CPP2=1 result in cache
> > hit.
> 
> Yes, so this means that the compiler has a bug. You should be able to
> reproduce it by running these two commands:
> 
> /usr/bin/gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -include ../config.h
> -I../include -DLOCALEDIR="/usr/share/locale" -fsigned-char -Os
> -march=i486 -mtune=pentium -pipe -fomit-frame-pointer -c -MT lscpu.o
> -MD -MP -MF .deps/lscpu.Tpo -E lscpu.c -o lscpu.i
> /usr/bin/gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -include ../config.h
> -I../include -DLOCALEDIR="/usr/share/locale" -fsigned-char -Os
> -march=i486 -mtune=pentium -pipe -fomit-frame-pointer -c lscpu.i -o
> lscpu.o
> 
> As mentioned, the ccache workaround for this kind of bug is to set
> CCACHE_CPP2=1.
> 
> -- Joel
> 
True, the second part fail for gcc-4.4.5 with
lscpu.c: In function 'read_hypervisor':
lscpu.c:446: error: can't find a register in class 'BREG' while reloading 'asm'
lscpu.c:446: error: 'asm' operand has impossible constraints

the good new is that the issue is workaround on util-linux-2.21.2 as more recent compiler warn for undefined operation there

commit 550a02d6e75833be169ac22ab4a2d479cc2ffcbf
Author: Petr Uzel <petr.uzel at suse.cz>
Date:   Mon Apr 23 10:43:38 2012 +0200

    lscpu: fix possibly undefined operation

    With -Wall -Werror, compilation of lscpu.c fails with:

      Making all in sys-utils
      make[2]: Entering directory `/home/petr/upstream/util-linux/sys-utils'
      gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I..  -include ../config.h -I../include -DLOCALEDIR=\"/usr/share/locale\"  -fsigned-char -Wall -Werror -MT lscpu.o -M
      lscpu.c: In function ‘print_parsable’:
      lscpu.c:971:7: error: operation on ‘p’ may be undefined [-Werror=sequence-point]
      cc1: all warnings being treated as errors

    Fix by splitting the pointer increment to separate statement.

    Signed-off-by: Petr Uzel <petr.uzel at suse.cz>

diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
index 65e1eb6..ee6969c 100644
--- a/sys-utils/lscpu.c
+++ b/sys-utils/lscpu.c
@@ -966,8 +966,10 @@ print_parsable(struct lscpu_desc *desc, int cols[], int ncols,
                         */
                        char *p = data + 1;

-                       while (p && *p != '\0')
-                               *p++ = tolower((unsigned int) *p);
+                       while (p && *p != '\0') {
+                               *p = tolower((unsigned int) *p);
+                               p++;
+                       }
                }
                fputs(data && *data ? data : "", stdout);
        }

So there is no issue on ccache and gcc-4.4.5 was not totally wrong while failing to compile.

Gilles


More information about the ccache mailing list