Переглянути джерело

elfutils: fix gcc 8.0+ multistatement macros warning/error

GCC 8.0+ <https://gcc.gnu.org/gcc-8/changes.html> introduces a new
warning about unsafe macros expanding to multiple statements used
as a body of a statement such as if, else, while, switch, or for.

In combination with -Werror this can cause the compilation to fail:

|In file included from xmalloc.c:37:
|xmalloc.c: In function 'xmalloc':
|system.h:39:2: error: macro expands to multiple statements [-Werror=multistatement-macros]
|  fflush(stdout); \
|  ^~~~~~
|xmalloc.c:52:5: note: in expansion of macro 'error'
|     error (EXIT_FAILURE, 0, _("memory exhausted"));
|     ^~~~~
|xmalloc.c:51:3: note: some parts of macro expansion are not guarded by this 'if' clause
|   if (p == NULL)
|   ^~

Signed-off-by: Christian Lamparter <[email protected]>
Christian Lamparter 6 роки тому
батько
коміт
a8bae35914
1 змінених файлів з 8 додано та 6 видалено
  1. 8 6
      package/libs/elfutils/patches/100-musl-compat.patch

+ 8 - 6
package/libs/elfutils/patches/100-musl-compat.patch

@@ -2,7 +2,7 @@ https://sourceware.org/bugzilla/show_bug.cgi?id=21002
 
 --- a/lib/system.h
 +++ b/lib/system.h
-@@ -30,7 +30,16 @@
+@@ -30,7 +30,18 @@
  #define LIB_SYSTEM_H	1
  
  #include <errno.h>
@@ -12,15 +12,17 @@ https://sourceware.org/bugzilla/show_bug.cgi?id=21002
 +#else
 +#include "err.h"
 +#include <stdio.h>
-+#define error(status, errno, ...) \
-+	fflush(stdout); \
-+	warn(__VA_ARGS__); \
-+	if (status) exit(status)
++#define error(status, errno, ...) 		\
++	do {					\
++		fflush(stdout); 		\
++		warn(__VA_ARGS__);		\
++		if (status) exit(status);	\
++	 } while(0)
 +#endif
  #include <stddef.h>
  #include <stdint.h>
  #include <sys/param.h>
-@@ -38,6 +47,10 @@
+@@ -38,6 +49,10 @@
  #include <byteswap.h>
  #include <unistd.h>