diff mbox series

[C++] Revert pretty-printing change for enumerators for debug info (PR libstdc++/88170)

Message ID 20190130233751.GY2135@tucnak
State New
Headers show
Series [C++] Revert pretty-printing change for enumerators for debug info (PR libstdc++/88170) | expand

Commit Message

Jakub Jelinek Jan. 30, 2019, 11:37 p.m. UTC
Hi!

The r265077 changes broke
+FAIL: libstdc++-prettyprinters/cxx17.cc print p
+FAIL: libstdc++-prettyprinters/cxx17.cc print p
+FAIL: libstdc++-prettyprinters/cxx17.cc print q
+FAIL: libstdc++-prettyprinters/cxx17.cc print q
+FAIL: libstdc++-prettyprinters/cxx17.cc print wp
+FAIL: libstdc++-prettyprinters/cxx17.cc print wp
+FAIL: libstdc++-prettyprinters/cxx17.cc print wq
+FAIL: libstdc++-prettyprinters/cxx17.cc print wq
+FAIL: libstdc++-prettyprinters/shared_ptr.cc print sp1
+FAIL: libstdc++-prettyprinters/shared_ptr.cc print sp1
+FAIL: libstdc++-prettyprinters/shared_ptr.cc print wp1
+FAIL: libstdc++-prettyprinters/shared_ptr.cc print wp1
+FAIL: libstdc++-prettyprinters/shared_ptr.cc print wp2
+FAIL: libstdc++-prettyprinters/shared_ptr.cc print wp2
where GDB isn't able to cope with the enumerators rather than
(enumerated_type) constant_integer e.g. in template arguments.
While printing enumerators might be more user-friendly in diagnostics
(though, if there are several enumerators with the same value, we don't
really preserve which one has been used in the source, just the first
matching one is printed), for debug info purposes I think the old
way is more expressive, requires less work from the debugger to find out
what exact value it has.  We have other spots where we change the pretty
printing decisions based on whether it is a debug info string
(decl_as_dwarf_string or lang_decl_dwarf_name) or some other one.

Bootstrapped/regtested on x86_64-linux and i686-linux, fixes the above
tests, ok for trunk?

2019-01-30  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/88170
	* c-pretty-print.c (pp_c_enumeration_constant): Print always as
	a C cast in pp_c_flag_gnu_v3 mode.

	* cxx-pretty-print.c (pp_cxx_enumeration_constant): Print always as
	a C cast in pp_c_flag_gnu_v3 mode.


	Jakub

Comments

Jason Merrill Jan. 31, 2019, 12:11 a.m. UTC | #1
On 1/30/19 6:37 PM, Jakub Jelinek wrote:
> Hi!
> 
> The r265077 changes broke
> +FAIL: libstdc++-prettyprinters/cxx17.cc print p
> +FAIL: libstdc++-prettyprinters/cxx17.cc print p
> +FAIL: libstdc++-prettyprinters/cxx17.cc print q
> +FAIL: libstdc++-prettyprinters/cxx17.cc print q
> +FAIL: libstdc++-prettyprinters/cxx17.cc print wp
> +FAIL: libstdc++-prettyprinters/cxx17.cc print wp
> +FAIL: libstdc++-prettyprinters/cxx17.cc print wq
> +FAIL: libstdc++-prettyprinters/cxx17.cc print wq
> +FAIL: libstdc++-prettyprinters/shared_ptr.cc print sp1
> +FAIL: libstdc++-prettyprinters/shared_ptr.cc print sp1
> +FAIL: libstdc++-prettyprinters/shared_ptr.cc print wp1
> +FAIL: libstdc++-prettyprinters/shared_ptr.cc print wp1
> +FAIL: libstdc++-prettyprinters/shared_ptr.cc print wp2
> +FAIL: libstdc++-prettyprinters/shared_ptr.cc print wp2
> where GDB isn't able to cope with the enumerators rather than
> (enumerated_type) constant_integer e.g. in template arguments.
> While printing enumerators might be more user-friendly in diagnostics
> (though, if there are several enumerators with the same value, we don't
> really preserve which one has been used in the source, just the first
> matching one is printed), for debug info purposes I think the old
> way is more expressive, requires less work from the debugger to find out
> what exact value it has.  We have other spots where we change the pretty
> printing decisions based on whether it is a debug info string
> (decl_as_dwarf_string or lang_decl_dwarf_name) or some other one.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, fixes the above
> tests, ok for trunk?
> 
> 2019-01-30  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR libstdc++/88170
> 	* c-pretty-print.c (pp_c_enumeration_constant): Print always as
> 	a C cast in pp_c_flag_gnu_v3 mode.
> 
> 	* cxx-pretty-print.c (pp_cxx_enumeration_constant): Print always as
> 	a C cast in pp_c_flag_gnu_v3 mode.

OK.

Jason
diff mbox series

Patch

--- gcc/c-family/c-pretty-print.c.jj	2019-01-01 12:37:51.297414807 +0100
+++ gcc/c-family/c-pretty-print.c	2019-01-30 15:18:14.687063006 +0100
@@ -976,14 +976,14 @@  static void
 pp_c_enumeration_constant (c_pretty_printer *pp, tree e)
 {
   tree type = TREE_TYPE (e);
-  tree value;
+  tree value = NULL_TREE;
 
   /* Find the name of this constant.  */
-  for (value = TYPE_VALUES (type);
-       value != NULL_TREE
-	&& !tree_int_cst_equal (DECL_INITIAL (TREE_VALUE (value)), e);
-       value = TREE_CHAIN (value))
-    ;
+  if ((pp->flags & pp_c_flag_gnu_v3) == 0)
+    for (value = TYPE_VALUES (type); value != NULL_TREE;
+	 value = TREE_CHAIN (value))
+      if (tree_int_cst_equal (DECL_INITIAL (TREE_VALUE (value)), e))
+	break;
 
   if (value != NULL_TREE)
     pp->id_expression (TREE_PURPOSE (value));
--- gcc/cp/cxx-pretty-print.c.jj	2019-01-17 09:03:11.487787550 +0100
+++ gcc/cp/cxx-pretty-print.c	2019-01-30 15:22:00.867327307 +0100
@@ -309,14 +309,14 @@  static void
 pp_cxx_enumeration_constant (cxx_pretty_printer *pp, tree e)
 {
   tree type = TREE_TYPE (e);
-  tree value;
+  tree value = NULL_TREE;
 
   /* Find the name of this constant.  */
-  for (value = TYPE_VALUES (type);
-       value != NULL_TREE
-	&& !tree_int_cst_equal (DECL_INITIAL (TREE_VALUE (value)), e);
-       value = TREE_CHAIN (value))
-    ;
+  if ((pp->flags & pp_c_flag_gnu_v3) == 0)
+    for (value = TYPE_VALUES (type); value != NULL_TREE;
+	 value = TREE_CHAIN (value))
+      if (tree_int_cst_equal (DECL_INITIAL (TREE_VALUE (value)), e))
+	break;
 
   if (value != NULL_TREE)
     {