glibc/time
Joseph Myers e4043b84c4 Fix strftime build with GCC 8.
Building with current GCC mainline fails with:

strftime_l.c: In function '__strftime_internal':
strftime_l.c:719:4: error: macro expands to multiple statements [-Werror=multistatement-macros]
    digits = d > width ? d : width;          \
    ^
strftime_l.c:1260:6: note: in expansion of macro 'DO_NUMBER'
      DO_NUMBER (1, tp->tm_year + TM_YEAR_BASE);
      ^~~~~~~~~
strftime_l.c:1259:4: note: some parts of macro expansion are not guarded by this 'else' clause
    else
    ^~~~

In fact this particular instance is harmless; the code looks like:

          if (modifier == L_('O'))
            goto bad_format;
          else
            DO_NUMBER (1, tp->tm_year + TM_YEAR_BASE);

and because of the goto, it doesn't matter that part of the expansion
isn't under the "else" conditional.  But it's also clearly bad style
to rely on that.  This patch changes DO_NUMBER and DO_NUMBER_SPACEPAD
to use do { } while (0) to avoid such problems.

Tested (full testsuite) for x86_64 (GCC 6), and with
build-many-glibcs.py with GCC mainline, in conjunction with my libgcc
patch <https://gcc.gnu.org/ml/gcc-patches/2017-06/msg02032.html>.

	* time/strftime_l.c (DO_NUMBER): Define using do { } while (0).
	(DO_NUMBER_SPACEPAD): Likewise.
2017-06-27 17:12:13 +00:00
..
bits/types Remove C++ namespace handling from glibc headers. 2017-03-16 13:31:57 +00:00
sys Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
adjtime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
alt_digit.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
asctime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
bug-asctime_r.c
bug-asctime.c
bug-getdate1.c support: Introduce new subdirectory for test infrastructure 2016-12-09 08:18:27 +01:00
bug-mktime1.c
clock.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
clocktest.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
ctime_r.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
ctime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
datemsk
Depend
difftime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
dysize.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
era.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
ftime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
getdate.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
getitimer.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
gettimeofday.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
gmtime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
lc-time-cleanup.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
localtime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
Makefile Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
mktime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
offtime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
setitimer.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
settimeofday.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
stime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
strftime_l.c Fix strftime build with GCC 8. 2017-06-27 17:12:13 +00:00
strftime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
strptime_l.c Use locale_t, not __locale_t, throughout glibc 2017-06-20 20:30:06 -04:00
strptime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
test_time.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
time.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
time.h Use locale_t, not __locale_t, throughout glibc 2017-06-20 20:30:06 -04:00
timegm.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
timespec_get.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst_wcsftime.c
tst-ftime_l.c
tst-ftime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-getdate.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-mktime2.c
tst-mktime3.c
tst-mktime.c
tst-posixtz.c Add missing header files throughout the testsuite. 2017-02-16 17:33:18 -05:00
tst-strftime.c
tst-strptime2.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
tst-strptime3.c
tst-strptime-whitespace.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-strptime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tst-tzname.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
tzfile.c timezone: Remove TZNAME_MAX limit from sysconf [BZ #15576] 2017-03-07 17:45:38 +01:00
tzset.c Update timezone code from tzcode 2017b. 2017-06-16 11:09:21 +00:00
Versions
wcsftime_l.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
wcsftime.c Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00