Fix GDB build with GCC 4.8 & 4.9
authorPedro Alves <pedro@palves.net>
Fri, 17 Jun 2022 10:10:40 +0000 (11:10 +0100)
committerPedro Alves <pedro@palves.net>
Fri, 17 Jun 2022 10:39:57 +0000 (11:39 +0100)
commitdfea48fc0f040e87c5d7d4fc34c0610dc0039ad1
tree28800394fccffea283142330be810f4edaae8535
parentdac9773e17261f905d51684fe35da036e82c69cd
Fix GDB build with GCC 4.8 & 4.9

With gcc 4.8/4.9, we run into this build failure (and other similar
ones):

  /home/palves/gdb/binutils-gdb/src/gdb/location.h:224:59: error: could not convert ‘{0, LINE_OFFSET_UNKNOWN}’ from ‘<brace-enclosed initializer list>’ to ‘line_offset’
     struct line_offset line_offset = {0, LINE_OFFSET_UNKNOWN};
     ^

The issue is that at around the GCC 4.8/4.9 era, a default member
initializer prevented the struct from being an aggregate, so you
cannot use aggregate initialization on them.  That rule changed after
GCC 4.9 and GCC 5 & later uses new rules.

Fix this by not using aggregate initialization for struct line_offset.
The default member initization already leaves line_offset as {0,
LINE_OFFSET_UNKNOWN}, so initialization to those values can just go
away.  The remaining cases are of the form {0, LINE_OFFSET_NONE}, and
those cases can be better rewritten to delay setting the sign field
until we know we have a valid offset.

Change-Id: I0506ea4a83c5fa2f15e159569db68b3b0a7509b4
gdb/linespec.c
gdb/location.h