+2020-02-18 Simon Marchi <simon.marchi@efficios.com>
+
+ * valprint.c (generic_val_print_enum_1): When printing a flag
+ enum with value 0 and there is no enumerator with value 0, print
+ just "0" instead of "(unknown: 0x0)".
+
2020-02-18 Simon Marchi <simon.marchi@efficios.com>
* valprint.c (generic_val_print_enum_1): Print unknown part of
gdb_test "print (enum flag_enum) 0x0" [string_to_regexp " = FE_NONE"]
# Print a flag enum with value 0, where no enumerator has value 0.
- gdb_test "print flag_enum_without_zero" [string_to_regexp " = (unknown: 0x0)"]
+ gdb_test "print flag_enum_without_zero" [string_to_regexp " = 0"]
# Print a flag enum with unknown bits set.
gdb_test "print (enum flag_enum) 0xf1" [string_to_regexp " = (FE_ONE | unknown: 0xf0)"]
appropriate. The enum may have multiple enumerators representing
the same bit, in which case we choose to only print the first one
we find. */
- fputs_filtered ("(", stream);
for (i = 0; i < len; ++i)
{
QUIT;
if ((val & enumval) != 0)
{
- if (!first)
+ if (first)
+ {
+ fputs_filtered ("(", stream);
+ first = 0;
+ }
+ else
fputs_filtered (" | ", stream);
- first = 0;
val &= ~TYPE_FIELD_ENUMVAL (type, i);
fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
}
}
- if (first || val != 0)
+ if (val != 0)
{
- if (!first)
+ /* There are leftover bits, print them. */
+ if (first)
+ fputs_filtered ("(", stream);
+ else
fputs_filtered (" | ", stream);
+
fputs_filtered ("unknown: 0x", stream);
print_longest (stream, 'x', 0, val);
+ fputs_filtered (")", stream);
+ }
+ else if (first)
+ {
+ /* Nothing has been printed and the value is 0, the enum value must
+ have been 0. */
+ fputs_filtered ("0", stream);
+ }
+ else
+ {
+ /* Something has been printed, close the parenthesis. */
+ fputs_filtered (")", stream);
}
-
- fputs_filtered (")", stream);
}
else
print_longest (stream, 'd', 0, val);