coreutils
[Top][All Lists]
Advanced

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

yes: rearrange code to prevent gcc10 warning


From: Christophe Meyering
Subject: yes: rearrange code to prevent gcc10 warning
Date: Wed, 29 Jan 2020 23:27:45 -0800

Hello,

Using GCC10 on Fedora 31, I built coreutils from a git clone of the latest
sources.
After running
$./bootstrap && ./configure && make
I got a few deprecation warnings for sys/sysctl.h which I skipped over, and
found an interesting error while building src/yes.o:
  CC       src/yes.o
src/yes.c: In function 'main':
src/yes.c:110:20: error: writing 1 byte into a region of size 0
[-Werror=stringop-overflow=]
  110 |   buf[bufused - 1] = '\n';
      |   ~~~~~~~~~~~~~~~~~^~~~~~
src/yes.c:100:51: note: at offset -1 to an object with size 8192 allocated
by 'xmalloc' here
  100 |   char *buf = reuse_operand_strings ? *operands : xmalloc
(bufalloc);
      |                                                   ^~~~~~~~~~~~~~~~~~

The compiler didn't deduce that the for loop will always iterate at least
once, therefore my first thought was to assert(operands < operand_lim)
before the start of the for loop on line 102.
I 'heard' :) about assure and decided to use that instead, before realizing
that I could make it obvious that the loop would run at least once by
converting the for loop into a do-while loop.
This avoided the warning. I also made sure the tests still pass on F31.

Chris Meyering

Attachment: coreutils_yes.c.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]