Re: GDB 8.1 build error

Pedro Alves
2018-04-27T19:08:21Z

On 04/27/2018 07:44 PM, Paul Koning wrote:

> I had deleted the build test directory, so I repeated the operation. Got a failure again but a completely different one:
>
> g++ -x c++ -std=gnu++11 -g -O2 -I. -I/Users/pkoning/Downloads/gdb-8.1/gdb -I/Users/pkoning/Downloads/gdb-8.1/gdb/common -I/Users/pkoning/Downloads/gdb-8.1/gdb/config -DLOCALEDIR="\"/usr/local/trunk/share/locale\"" -DHAVE_CONFIG_H -I/Users/pkoning/Downloads/gdb-8.1/gdb/../include/opcode -I/Users/pkoning/Downloads/gdb-8.1/gdb/../opcodes/.. -I/Users/pkoning/Downloads/gdb-8.1/gdb/../readline/.. -I/Users/pkoning/Downloads/gdb-8.1/gdb/../zlib -I../bfd -I/Users/pkoning/Downloads/gdb-8.1/gdb/../bfd -I/Users/pkoning/Downloads/gdb-8.1/gdb/../include -I../libdecnumber -I/Users/pkoning/Downloads/gdb-8.1/gdb/../libdecnumber -I/Users/pkoning/Downloads/gdb-8.1/gdb/gnulib/import -Ibuild-gnulib/import -DTUI=1 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -w -c -o completer.o -MT completer.o -MMD -MP -MF ./.deps/completer.Tpo /Users/pkoning/Downloads/gdb-8.1/gdb/completer.c
>
> /Users/pkoning/Downloads/gdb-8.1/gdb/completer.c:2041:23: error:
> non-constant-expression cannot be narrowed from type 'int' to 'char' in
> initializer list [-Wc++11-narrowing]
> char buf[2] = { quote_char () };
> ^~~~~~~~~~~~~
> /Users/pkoning/Downloads/gdb-8.1/gdb/completer.c:2041:23: note: insert an
> explicit cast to silence this issue
> char buf[2] = { quote_char () };
> ^~~~~~~~~~~~~
> static_cast<char>( )

We silence those currently for gcc with "-Wno-narrowing" (in gdb/warning.m4).
Looks like clang uses a different spelling for that warning [-Wc++11-narrowing].

Or ... does it? This:

https://clang.llvm.org/docs/DiagnosticsReference.html#wnarrowing

says that -Wnarrowing is synonym for -Wc++11-narrowing. So is that a clang bug?

Adding that to gdb/warning.m4 (and regenerating gdb/configure gdb/gdbserver/configure
should fix it). That is, until we actual fix the code to not require
silencing the warning (https://sourceware.org/bugzilla/show_bug.cgi?id=23087),
but that's a larger chunk of work.

Oh, wait.... Your build line has no "-W" at all, it has "-w" instead??
How did that happen?

>
> I then asked specifically for probe.o ("cd gdb && make probe.o"):
>
> g++ -x c++ -std=gnu++11 -g -O2 -I. -I/Users/pkoning/Downloads/gdb-8.1/gdb -I/Users/pkoning/Downloads/gdb-8.1/gdb/common -I/Users/pkoning/Downloads/gdb-8.1/gdb/config -DLOCALEDIR="\"/usr/local/trunk/share/locale\"" -DHAVE_CONFIG_H -I/Users/pkoning/Downloads/gdb-8.1/gdb/../include/opcode -I/Users/pkoning/Downloads/gdb-8.1/gdb/../opcodes/.. -I/Users/pkoning/Downloads/gdb-8.1/gdb/../readline/.. -I/Users/pkoning/Downloads/gdb-8.1/gdb/../zlib -I../bfd -I/Users/pkoning/Downloads/gdb-8.1/gdb/../bfd -I/Users/pkoning/Downloads/gdb-8.1/gdb/../include -I../libdecnumber -I/Users/pkoning/Downloads/gdb-8.1/gdb/../libdecnumber -I/Users/pkoning/Downloads/gdb-8.1/gdb/gnulib/import -Ibuild-gnulib/import -DTUI=1 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -w -c -o probe.o -MT probe.o -MMD -MP -MF ./.deps/probe.Tpo /Users/pkoning/Downloads/gdb-8.1/gdb/probe.c
> /Users/pkoning/Downloads/gdb-8.1/gdb/probe.c:63:28: error: default
> initialization of an object of const type 'const any_static_probe_ops'
> without a user-provided default constructor
> const any_static_probe_ops any_static_probe_ops;
> ^
> {}

Right, that's ill-formed, thus a gdb bug. A const POD must either
be initialized, or have a user-declared default constructor.

So adding an explicit initializer like clang is suggesting should fix it:

const any_static_probe_ops any_static_probe_ops = {};

Thanks,
Pedro Alves