https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81364
Bug ID: 81364
Summary: Bogus -Wmultistatement-macros warning
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: preprocessor
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: polacek at redhat dot com
Target Milestone: ---
[hjl@gnu-tools-1 tmp]$ cat x.c
#define TST_IF_RETURN(_s_func_) \
if (_s_func_) \
{ \
} \
else
#define TST_FUNC_ISW(_FUNC_, _func_) \
int \
tst_isw##_func_ (int debug_flg) \
{ \
TST_IF_RETURN (_FUNC_) \
{ \
} \
}
extern int LOWER;
TST_FUNC_ISW (LOWER, lower);
[hjl@gnu-tools-1 tmp]$
/export/build/gnu/gcc-cet/release/usr/gcc-8.0.0-cet/bin/gcc
-Wmultistatement-macros -S x.c
x.c: In function ‘tst_iswlower’:
x.c:12:3: warning: macro expands to multiple statements
[-Wmultistatement-macros]
{ \
^
x.c:18:1: note: in expansion of macro ‘TST_FUNC_ISW’
TST_FUNC_ISW (LOWER, lower);
^~~~~~~~~~~~
x.c:5:2: note: some parts of macro expansion are not guarded by this ‘else’
clause
else
^
x.c:11:3: note: in expansion of macro ‘TST_IF_RETURN’
TST_IF_RETURN (_FUNC_) \
^~~~~~~~~~~~~
x.c:18:1: note: in expansion of macro ‘TST_FUNC_ISW’
TST_FUNC_ISW (LOWER, lower);
^~~~~~~~~~~~
[hjl@gnu-tools-1 tmp]$