]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix elf/loadtest.c build with GCC 8.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 27 Jun 2017 17:52:42 +0000 (17:52 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 27 Jun 2017 17:52:42 +0000 (17:52 +0000)
Building the testsuite with current GCC mainline fails with:

loadtest.c: In function 'main':
loadtest.c:76:3: error: macro expands to multiple statements [-Werror=multistatement-macros]
   for (map = MAPS; map != NULL; map = map->l_next)        \
   ^
loadtest.c:165:2: note: in expansion of macro 'OUT'
  OUT;
  ^~~
loadtest.c:164:7: note: some parts of macro expansion are not guarded by this 'if' clause
       if (debug)
       ^~

This seems like a genuine bug, although fairly harmless; it means the
fflush call in the OUT macro is unconditional instead of being inside
the conditional as presumably intended.  This patch makes this macro
use do { } while (0) to avoid the problem.

Tested for x86_64 (testsuite), and with build-many-glibcs.py for
aarch64-linux-gnu with GCC mainline.

* elf/loadtest.c (OUT): Define using do { } while (0).

ChangeLog
elf/loadtest.c

index 6ed7f08529d4771b04e7c89ccfab049c478c0de7..ce383693fc27100791304573372899e65cb3e95b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2017-06-27  Joseph Myers  <joseph@codesourcery.com>
 
+       * elf/loadtest.c (OUT): Define using do { } while (0).
+
        * time/strftime_l.c (DO_NUMBER): Define using do { } while (0).
        (DO_NUMBER_SPACEPAD): Likewise.
 
index 727469b49679777f19f2f5cdb3fd41b2422e847b..b5eab5e93ca10878664b596304f30a0f032c7068 100644 (file)
@@ -72,12 +72,16 @@ static const struct
 
 #define MAPS ((struct link_map *) _r_debug.r_map)
 
-#define OUT \
-  for (map = MAPS; map != NULL; map = map->l_next)                   \
-    if (map->l_type == lt_loaded)                                            \
-      printf ("name = \"%s\", direct_opencount = %d\n",                              \
-             map->l_name, (int) map->l_direct_opencount);                    \
-  fflush (stdout)
+#define OUT                                                    \
+  do                                                           \
+    {                                                          \
+      for (map = MAPS; map != NULL; map = map->l_next)         \
+       if (map->l_type == lt_loaded)                           \
+         printf ("name = \"%s\", direct_opencount = %d\n",     \
+                 map->l_name, (int) map->l_direct_opencount);  \
+      fflush (stdout);                                         \
+    }                                                          \
+  while (0)
 
 
 int