On 20/09/16 15:11, Bernd Edlinger wrote:
On 09/20/16 13:29, Kyrill Tkachov wrote:
arm bootstrap is now failing:
$SRC/gcc/config/arm/arm.h:2229:40: error: ?: using integer constants in
boolean context [-Werror=int-in-bool-context]
      : (TARGET_VFP_DOUBLE ? (TARGET_FP16 ? 14 : 12) : 0)) \
                             ~~~~~~~~~~~~~^~~~~~~~~~
$SRC/gcc/config/arm/arm-c.c:133:7: note: in expansion of macro
'TARGET_ARM_FP'
     if (TARGET_ARM_FP)


The full definition of TARGET_ARM_FP is:
#define TARGET_ARM_FP            \
    (!TARGET_SOFT_FLOAT ? (TARGET_VFP_SINGLE ? 4        \
              : (TARGET_VFP_DOUBLE ? (TARGET_FP16 ? 14 : 12) : 0)) \
                : 0)

We want it set to 0 when there's no FP but when FP is available we set
it to a bitmask
to suggest the level that is available. That seems like a legitimate use
to me.

Ok, I see, sorry for that.

I think I will have to suppress the warning if the conditional is in
a macro somehow.

Can you work around that for a few days?

I changed to:
 if (TARGET_ARM_FP != 0)
in my tree to allow the build to proceed but encountered another bootstrap 
failure:
In file included from ./tm.h:38:0,
                 from $SRC/gcc/backend.h:28,
                 from $SRC/gcc/regrename.c:23:
$SRC/gcc/regrename.c: In function 'void rename_chains()':
$SRC/gcc/config/arm/arm.h:915:4: error: ?: using integer constants in boolean 
context [-Werror=int-in-bool-context]
   (TARGET_ARM     \
   ~~~~~~~~~~~~~~~~~
    ? ARM_HARD_FRAME_POINTER_REGNUM  \
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    : THUMB_HARD_FRAME_POINTER_REGNUM)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$SRC/gcc/regrename.c:484:8: note: in expansion of macro 
'HARD_FRAME_POINTER_REGNUM'
    || (HARD_FRAME_POINTER_REGNUM && frame_pointer_needed
        ^~~~~~~~~~~~~~~~~~~~~~~~~
That looks like a legitimate bug in regrename.c ?
The full condition is:
       if (fixed_regs[reg] || global_regs[reg]
           || (!HARD_FRAME_POINTER_IS_FRAME_POINTER && frame_pointer_needed
               && reg == HARD_FRAME_POINTER_REGNUM)
           || (HARD_FRAME_POINTER_REGNUM && frame_pointer_needed
               && reg == FRAME_POINTER_REGNUM))

The condition in the second || looks bogus (what use testing if a register is 
'non-zero').

So this looks like a useful catch by the warning, though I'm not sure at first 
glance how
to fix it.
Kyrill


Bernd.

Reply via email to