Commit ad82a928 authored by Vasily Gorbik's avatar Vasily Gorbik Committed by Martin Schwidefsky

s390/perf: fix gcc 8 array-bounds warning

arch/s390/kernel/perf_regs.c:36:19: warning: array subscript 16 is above
array bounds of 'long unsigned int[16]' [-Warray-bounds]
  return regs->gprs[idx];

gcc tries to be smart here and since there is a condition:
if (idx >= PERF_REG_S390_R0 && idx <= PERF_REG_S390_R15)
	return regs->gprs[idx];
which covers all possible array subscripts, it gives the warning
for the last function return statement:
	return regs->gprs[idx];
which in presence of that condition does not really make sense and
should be replaced with "return 0;"

Also move WARN_ON_ONCE((u32)idx >= PERF_REG_S390_MAX) to the end of the
function.
Reviewed-by: default avatarHendrik Brueckner <brueckner@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent f6ea4d25
...@@ -12,9 +12,6 @@ u64 perf_reg_value(struct pt_regs *regs, int idx) ...@@ -12,9 +12,6 @@ u64 perf_reg_value(struct pt_regs *regs, int idx)
{ {
freg_t fp; freg_t fp;
if (WARN_ON_ONCE((u32)idx >= PERF_REG_S390_MAX))
return 0;
if (idx >= PERF_REG_S390_R0 && idx <= PERF_REG_S390_R15) if (idx >= PERF_REG_S390_R0 && idx <= PERF_REG_S390_R15)
return regs->gprs[idx]; return regs->gprs[idx];
...@@ -33,7 +30,8 @@ u64 perf_reg_value(struct pt_regs *regs, int idx) ...@@ -33,7 +30,8 @@ u64 perf_reg_value(struct pt_regs *regs, int idx)
if (idx == PERF_REG_S390_PC) if (idx == PERF_REG_S390_PC)
return regs->psw.addr; return regs->psw.addr;
return regs->gprs[idx]; WARN_ON_ONCE((u32)idx >= PERF_REG_S390_MAX);
return 0;
} }
#define REG_RESERVED (~((1UL << PERF_REG_S390_MAX) - 1)) #define REG_RESERVED (~((1UL << PERF_REG_S390_MAX) - 1))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment