This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix elf/loadtest.c build with GCC 8 [committed]


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.  Committed.

2017-06-27  Joseph Myers  <joseph@codesourcery.com>

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

diff --git a/elf/loadtest.c b/elf/loadtest.c
index 727469b..b5eab5e 100644
--- a/elf/loadtest.c
+++ b/elf/loadtest.c
@@ -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

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]