https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68473
--- Comment #8 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
(In reply to Jay Foad from comment #6)
> FYI here's another test case that seems to trigger the same bug. Your
> candidate patch fixes it.
>
> $ cat x.c
> #define P(b) b&&4
> int a[]=0;
> int f() { X||P(d); }
> $ ~/gcc/build/gcc/cc1 -quiet -Wall x.c
> [...]
> x.c:3:1: internal compiler error: in contains_point, at
> diagnostic-show-locus.c:335
> int f() { X||P(d); }
> ^~~
Thanks.
For this one, it's attempting to issue:
"suggest parentheses around %<&&%> within %<||%>"
and all three parts of the location are within macro expansions, as it happens,
within the same macro expansion:
(gdb) p /x line_table->location_adhoc_data_map.data[0x1]
$12 = {locus = 0x7ffffffb, src_range = {m_start = 0x7ffffffa, m_finish =
0x7ffffffc}, data = 0x0}
(gdb) call inform (0x7ffffffb, "locus")
pr68473-2.c:2:15: note: locus
#define P(b) b&&4
^
pr68473-2.c:4:14: note: in expansion of macro ‘P’
int f() { X||P(d); }
^
(gdb) call inform (0x7ffffffa, "m_start")
pr68473-2.c:4:16: note: m_start
int f() { X||P(d); }
^
pr68473-2.c:2:14: note: in definition of macro ‘P’
#define P(b) b&&4
^
(gdb) call inform (0x7ffffffc, "m_finish")
pr68473-2.c:2:17: note: m_finish
#define P(b) b&&4
^
pr68473-2.c:4:14: note: in expansion of macro ‘P’
int f() { X||P(d); }
^
i.e. it's the: "b&&4"
The patch from comment #5 makes it emit:
pr68473-2.c:2:15: warning: suggest parentheses around '&&' within '||'
[-Wparentheses]
#define P(b) b&&4
^
pr68473-2.c:4:14: note: in expansion of macro 'P'
int f() { X||P(d); }
^
Perhaps ideally it should emit:
pr68473-2.c:2:15: warning: suggest parentheses around '&&' within '||'
[-Wparentheses]
#define P(b) b&&4
~^~~
pr68473-2.c:4:14: note: in expansion of macro 'P'
int f() { X||P(d); }
^
given that all parts of the range are within the same expansion (a much more
involved patch, I think)