public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] PR debug/37959
@ 2008-11-03 20:08 Dodji Seketeli
  2008-11-03 22:03 ` Jason Merrill
  0 siblings, 1 reply; 10+ messages in thread
From: Dodji Seketeli @ 2008-11-03 20:08 UTC (permalink / raw)
  To: Gcc Patch List, Jason Merrill

[-- Attachment #1: Type: text/plain, Size: 211 bytes --]

Hello,

This patch fixes PR debug/37959. It basically makes g++ emit a 
DW_AT_explicit attribute for C++ explicit constructors.

It passes regression tests on trunk for the x86_64 architecture.

Thanks,

Dodji.

[-- Attachment #2: PR37959-patch.txt --]
[-- Type: text/plain, Size: 6164 bytes --]

gcc/ChangeLog:
2008-10-31  Dodji Seketeli  <dodji@redhat.com>

	* dwarf2out.c (dwarf_attr_name): Learn about DW_AT_explicit attribute.
	(gen_subprogram_die): When a function is an explicit constructor,
	generate the DW_AT_explicit attribute.
	* langhooks.h: Add two new hooks to let the debug backend query
	the front end about if a function decl is a constructor and if it is explicit.

gcc/cp/ChangeLog:
2008-10-31  Dodji Seketeli  <dodji@redhat.com>

	* PR debug/37959
	* cp-lang.c: Set the new lang hooks LANG_HOOKS_FUNCTION_DECL_IS_CONSTRUCTOR
	and LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT for the c++ FE.
	(cp_function_decl_is_constructor_p): New function.
	(cp_constructor_is_explicit_p): Ditto.

gcc/testsuite/ChangeLog:
2008-10-31  Dodji Seketeli  <dodji@redhat.com>

	PR debug/37959
	* g++.dg/debug/dwarf2/explicit-constructor.C: New test.

diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c
index b30ad81..30cfa4f 100644
--- a/gcc/cp/cp-lang.c
+++ b/gcc/cp/cp-lang.c
@@ -57,6 +57,10 @@ static enum classify_record cp_classify_record (tree type);
 #define LANG_HOOKS_FOLD_OBJ_TYPE_REF cp_fold_obj_type_ref
 #undef LANG_HOOKS_INIT_TS
 #define LANG_HOOKS_INIT_TS cp_init_ts
+#undef  LANG_HOOKS_FUNCTION_DECL_IS_CONSTRUCTOR
+#define LANG_HOOKS_FUNCTION_DECL_IS_CONSTRUCTOR cp_function_decl_is_constructor_p
+#undef  LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT
+#define LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT cp_function_decl_is_explicit_p
 
 /* Each front end provides its own lang hook initializer.  */
 const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
@@ -124,6 +128,25 @@ cp_classify_record (tree type)
   return RECORD_IS_STRUCT;
 }
 
+/* This is the c++ implementation of
+   lang_hooks.decl.function_decl_is_constructor_p declared in gcc/langhooks.h  */
+bool
+cp_function_decl_is_constructor_p (tree decl)
+{
+  return (decl
+	  && TREE_CODE (decl) == FUNCTION_DECL
+	  && DECL_CONSTRUCTOR_P (decl));
+}
+
+/*This is the c++ implementation of
+  lang_hooks.decl.constructor_is_explicit_p declared in gcc/langhooks.  */
+bool
+cp_function_decl_is_explicit_p (tree decl)
+{
+  return (decl && FUNCTION_FIRST_USER_PARMTYPE (decl) != void_list_node
+	  && DECL_NONCONVERTING_P (decl));
+}
+
 void
 finish_file (void)
 {
diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h
index db78f94..34a9aad 100644
--- a/gcc/cp/cp-objcp-common.h
+++ b/gcc/cp/cp-objcp-common.h
@@ -26,6 +26,10 @@ along with GCC; see the file COPYING3.  If not see
 extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t,
 					 tree, bool);
 
+extern bool cp_function_decl_is_constructor_p (tree decl);
+
+extern bool cp_function_decl_is_explicit_p (tree decl);
+
 /* Lang hooks that are shared between C++ and ObjC++ are defined here.  Hooks
    specific to C++ or ObjC++ go in cp/cp-lang.c and objcp/objcp-lang.c,
    respectively.  */
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 614871e..9ca8c54 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -5549,6 +5549,8 @@ dwarf_attr_name (unsigned int attr)
       return "DW_AT_encoding";
     case DW_AT_external:
       return "DW_AT_external";
+    case DW_AT_explicit:
+      return "DW_AT_explicit";
     case DW_AT_frame_base:
       return "DW_AT_frame_base";
     case DW_AT_friend:
@@ -13624,6 +13626,12 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
 	{
 	  add_AT_flag (subr_die, DW_AT_declaration, 1);
 
+	  /* If this is an explicit constructor declaration then generate
+	     a DW_AT_explicit attribute.  */
+          if (lang_hooks.decls.function_decl_is_constructor_p (decl)
+	      && lang_hooks.decls.function_decl_is_explicit_p (decl))
+	    add_AT_flag (subr_die, DW_AT_explicit, 1);
+
 	  /* The first time we see a member function, it is in the context of
 	     the class to which it belongs.  We make sure of this by emitting
 	     the class first.  The next time is the definition, which is
diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h
index 996e2f2..3de7a97 100644
--- a/gcc/langhooks-def.h
+++ b/gcc/langhooks-def.h
@@ -189,6 +189,8 @@ extern tree lhd_make_node (enum tree_code);
 #define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
 #define LANG_HOOKS_PUSHDECL	pushdecl
 #define LANG_HOOKS_GETDECLS	getdecls
+#define LANG_HOOKS_FUNCTION_DECL_IS_CONSTRUCTOR hook_bool_tree_false
+#define LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT hook_bool_tree_false
 #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
 #define LANG_HOOKS_WRITE_GLOBALS write_global_declarations
 #define LANG_HOOKS_DECL_OK_FOR_SIBCALL	lhd_decl_ok_for_sibcall
@@ -208,6 +210,8 @@ extern tree lhd_make_node (enum tree_code);
   LANG_HOOKS_GLOBAL_BINDINGS_P, \
   LANG_HOOKS_PUSHDECL, \
   LANG_HOOKS_GETDECLS, \
+  LANG_HOOKS_FUNCTION_DECL_IS_CONSTRUCTOR, \
+  LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT, \
   LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
   LANG_HOOKS_WRITE_GLOBALS, \
   LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
diff --git a/gcc/langhooks.h b/gcc/langhooks.h
index 752ad99..c0fbbe0 100644
--- a/gcc/langhooks.h
+++ b/gcc/langhooks.h
@@ -159,6 +159,13 @@ struct lang_hooks_for_decls
   /* Returns the chain of decls so far in the current scope level.  */
   tree (*getdecls) (void);
 
+  /* Returns true if the function declaration is a constructor.  */
+  bool (*function_decl_is_constructor_p) (tree);
+
+  /* Returns true if the constructor is explicit.  */
+  bool (*function_decl_is_explicit_p) (tree);
+
+
   /* Returns true when we should warn for an unused global DECL.
      We will already have checked that it has static binding.  */
   bool (*warn_unused_global) (const_tree);
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C
new file mode 100644
index 0000000..ba0c162
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C
@@ -0,0 +1,19 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin: PR c++
+// { dg-do compile }
+// { dg-options "-O -g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_explicit" "2" } }
+
+struct Foo
+{
+  Foo () {}
+  explicit Foo (int) {}
+  Foo (char) {}
+  ~Foo () {};
+};
+
+void
+bar ()
+{
+  Foo foo;
+}

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] PR debug/37959
  2008-11-03 20:08 [PATCH] PR debug/37959 Dodji Seketeli
@ 2008-11-03 22:03 ` Jason Merrill
  2008-11-04 14:06   ` Dodji Seketeli
  0 siblings, 1 reply; 10+ messages in thread
From: Jason Merrill @ 2008-11-03 22:03 UTC (permalink / raw)
  To: Dodji Seketeli; +Cc: Gcc Patch List

> +	  /* If this is an explicit constructor declaration then generate
> +	     a DW_AT_explicit attribute.  */
> +          if (lang_hooks.decls.function_decl_is_constructor_p (decl)
> +	      && lang_hooks.decls.function_decl_is_explicit_p (decl))
> +	    add_AT_flag (subr_die, DW_AT_explicit, 1);

My point was that we don't want to check whether the function is a 
constructor, because other functions can be explicit too.  And even if 
that wasn't the case there wouldn't be any reason to do this with two 
langhooks for a single test.  We don't need the is_constructor_p langhook.

Jason

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] PR debug/37959
  2008-11-03 22:03 ` Jason Merrill
@ 2008-11-04 14:06   ` Dodji Seketeli
  2008-11-04 17:03     ` Jason Merrill
  0 siblings, 1 reply; 10+ messages in thread
From: Dodji Seketeli @ 2008-11-04 14:06 UTC (permalink / raw)
  To: Jason Merrill; +Cc: Gcc Patch List

[-- Attachment #1: Type: text/plain, Size: 211 bytes --]

Jason Merrill a écrit :

[...]

>  We don't need the is_constructor_p langhook.

Okay. Please find attached a new version that should be better suited.

It passes regstest on trunk for x86_64.

Thanks.

Dodji.

[-- Attachment #2: PR37959-patch.txt --]
[-- Type: text/plain, Size: 5255 bytes --]

gcc/ChangeLog:
2008-10-31  Dodji Seketeli  <dodji@redhat.com>

	* dwarf2out.c (dwarf_attr_name): Learn about DW_AT_explicit attribute.
	(gen_subprogram_die): When a function is explicit, generate the DW_AT_explicit
	attribute.
	* langhooks.h: Add a hook to let the debug backend query the front end about
	if a function decl is explicit.

gcc/cp/ChangeLog:
2008-10-31  Dodji Seketeli  <dodji@redhat.com>

	* PR debug/37959
	* cp-lang.c: Set the new lang hook LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT
	for the c++ FE.
	(cp_function_decl_is_constructor_p): New function.

gcc/testsuite/ChangeLog:
2008-10-31  Dodji Seketeli  <dodji@redhat.com>

	PR debug/37959
	* g++.dg/debug/dwarf2/explicit-constructor.C: New test.

diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c
index b30ad81..5e5f000 100644
--- a/gcc/cp/cp-lang.c
+++ b/gcc/cp/cp-lang.c
@@ -57,6 +57,8 @@ static enum classify_record cp_classify_record (tree type);
 #define LANG_HOOKS_FOLD_OBJ_TYPE_REF cp_fold_obj_type_ref
 #undef LANG_HOOKS_INIT_TS
 #define LANG_HOOKS_INIT_TS cp_init_ts
+#undef  LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT
+#define LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT cp_function_decl_is_explicit_p
 
 /* Each front end provides its own lang hook initializer.  */
 const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
@@ -124,6 +126,15 @@ cp_classify_record (tree type)
   return RECORD_IS_STRUCT;
 }
 
+/* This is the c++ implementation of
+   lang_hooks.decl.function_decl_is_explicit_p declared in gcc/langhooks.  */
+bool
+cp_function_decl_is_explicit_p (tree decl)
+{
+  return (decl && FUNCTION_FIRST_USER_PARMTYPE (decl) != void_list_node
+	  && DECL_NONCONVERTING_P (decl));
+}
+
 void
 finish_file (void)
 {
diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h
index db78f94..3900f1e 100644
--- a/gcc/cp/cp-objcp-common.h
+++ b/gcc/cp/cp-objcp-common.h
@@ -26,6 +26,8 @@ along with GCC; see the file COPYING3.  If not see
 extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t,
 					 tree, bool);
 
+extern bool cp_function_decl_is_explicit_p (tree decl);
+
 /* Lang hooks that are shared between C++ and ObjC++ are defined here.  Hooks
    specific to C++ or ObjC++ go in cp/cp-lang.c and objcp/objcp-lang.c,
    respectively.  */
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 614871e..d81ce03 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -5549,6 +5549,8 @@ dwarf_attr_name (unsigned int attr)
       return "DW_AT_encoding";
     case DW_AT_external:
       return "DW_AT_external";
+    case DW_AT_explicit:
+      return "DW_AT_explicit";
     case DW_AT_frame_base:
       return "DW_AT_frame_base";
     case DW_AT_friend:
@@ -13624,6 +13626,11 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
 	{
 	  add_AT_flag (subr_die, DW_AT_declaration, 1);
 
+	  /* If this is an explicit function declaration then generate
+	     a DW_AT_explicit attribute.  */
+          if (lang_hooks.decls.function_decl_is_explicit_p (decl))
+	    add_AT_flag (subr_die, DW_AT_explicit, 1);
+
 	  /* The first time we see a member function, it is in the context of
 	     the class to which it belongs.  We make sure of this by emitting
 	     the class first.  The next time is the definition, which is
diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h
index 996e2f2..11da544 100644
--- a/gcc/langhooks-def.h
+++ b/gcc/langhooks-def.h
@@ -189,6 +189,7 @@ extern tree lhd_make_node (enum tree_code);
 #define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
 #define LANG_HOOKS_PUSHDECL	pushdecl
 #define LANG_HOOKS_GETDECLS	getdecls
+#define LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT hook_bool_tree_false
 #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
 #define LANG_HOOKS_WRITE_GLOBALS write_global_declarations
 #define LANG_HOOKS_DECL_OK_FOR_SIBCALL	lhd_decl_ok_for_sibcall
@@ -208,6 +209,7 @@ extern tree lhd_make_node (enum tree_code);
   LANG_HOOKS_GLOBAL_BINDINGS_P, \
   LANG_HOOKS_PUSHDECL, \
   LANG_HOOKS_GETDECLS, \
+  LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT, \
   LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
   LANG_HOOKS_WRITE_GLOBALS, \
   LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
diff --git a/gcc/langhooks.h b/gcc/langhooks.h
index 752ad99..a192216 100644
--- a/gcc/langhooks.h
+++ b/gcc/langhooks.h
@@ -159,6 +159,9 @@ struct lang_hooks_for_decls
   /* Returns the chain of decls so far in the current scope level.  */
   tree (*getdecls) (void);
 
+  /* Returns true if the constructor is explicit.  */
+  bool (*function_decl_is_explicit_p) (tree);
+
   /* Returns true when we should warn for an unused global DECL.
      We will already have checked that it has static binding.  */
   bool (*warn_unused_global) (const_tree);
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C
new file mode 100644
index 0000000..ba0c162
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C
@@ -0,0 +1,19 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin: PR c++
+// { dg-do compile }
+// { dg-options "-O -g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_explicit" "2" } }
+
+struct Foo
+{
+  Foo () {}
+  explicit Foo (int) {}
+  Foo (char) {}
+  ~Foo () {};
+};
+
+void
+bar ()
+{
+  Foo foo;
+}

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] PR debug/37959
  2008-11-04 14:06   ` Dodji Seketeli
@ 2008-11-04 17:03     ` Jason Merrill
  2008-11-04 21:38       ` Dodji Seketeli
  0 siblings, 1 reply; 10+ messages in thread
From: Jason Merrill @ 2008-11-04 17:03 UTC (permalink / raw)
  To: Dodji Seketeli; +Cc: Gcc Patch List

> 	(cp_function_decl_is_constructor_p): New function.

Wrong one :)

Other than that, this looks good, but you'll need to get an OK from a 
release manager to check it in on the trunk since it isn't a regression.

Jason

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] PR debug/37959
  2008-11-04 17:03     ` Jason Merrill
@ 2008-11-04 21:38       ` Dodji Seketeli
  2009-03-18 15:27         ` Jakub Jelinek
  0 siblings, 1 reply; 10+ messages in thread
From: Dodji Seketeli @ 2008-11-04 21:38 UTC (permalink / raw)
  To: Jason Merrill; +Cc: Gcc Patch List

[-- Attachment #1: Type: text/plain, Size: 363 bytes --]

Jason Merrill a écrit :
>>     (cp_function_decl_is_constructor_p): New function.
> 
> Wrong one :)

Oops, fixed in the attached patch.

> Other than that, this looks good, but you'll need to get an OK from a 
> release manager to check it in on the trunk since it isn't a regression.

I think I'll just wait for trunk to re-open again then :)

Thanks,

Dodji.


[-- Attachment #2: PR37959-patch.txt --]
[-- Type: text/plain, Size: 5252 bytes --]

gcc/ChangeLog:
2008-10-31  Dodji Seketeli  <dodji@redhat.com>

	* dwarf2out.c (dwarf_attr_name): Learn about DW_AT_explicit attribute.
	(gen_subprogram_die): When a function is explicit, generate the DW_AT_explicit
	attribute.
	* langhooks.h: Add a hook to let the debug backend query the front end about
	if a function decl is explicit.

gcc/cp/ChangeLog:
2008-10-31  Dodji Seketeli  <dodji@redhat.com>

	* PR debug/37959
	* cp-lang.c: Set the new lang hook LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT
	for the c++ FE.
	(cp_function_decl_is_explicit_p): New function.

gcc/testsuite/ChangeLog:
2008-10-31  Dodji Seketeli  <dodji@redhat.com>

	PR debug/37959
	* g++.dg/debug/dwarf2/explicit-constructor.C: New test.

diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c
index b30ad81..5e5f000 100644
--- a/gcc/cp/cp-lang.c
+++ b/gcc/cp/cp-lang.c
@@ -57,6 +57,8 @@ static enum classify_record cp_classify_record (tree type);
 #define LANG_HOOKS_FOLD_OBJ_TYPE_REF cp_fold_obj_type_ref
 #undef LANG_HOOKS_INIT_TS
 #define LANG_HOOKS_INIT_TS cp_init_ts
+#undef  LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT
+#define LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT cp_function_decl_is_explicit_p
 
 /* Each front end provides its own lang hook initializer.  */
 const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
@@ -124,6 +126,15 @@ cp_classify_record (tree type)
   return RECORD_IS_STRUCT;
 }
 
+/* This is the c++ implementation of
+   lang_hooks.decl.function_decl_is_explicit_p declared in gcc/langhooks.  */
+bool
+cp_function_decl_is_explicit_p (tree decl)
+{
+  return (decl && FUNCTION_FIRST_USER_PARMTYPE (decl) != void_list_node
+	  && DECL_NONCONVERTING_P (decl));
+}
+
 void
 finish_file (void)
 {
diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h
index db78f94..3900f1e 100644
--- a/gcc/cp/cp-objcp-common.h
+++ b/gcc/cp/cp-objcp-common.h
@@ -26,6 +26,8 @@ along with GCC; see the file COPYING3.  If not see
 extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t,
 					 tree, bool);
 
+extern bool cp_function_decl_is_explicit_p (tree decl);
+
 /* Lang hooks that are shared between C++ and ObjC++ are defined here.  Hooks
    specific to C++ or ObjC++ go in cp/cp-lang.c and objcp/objcp-lang.c,
    respectively.  */
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 614871e..d81ce03 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -5549,6 +5549,8 @@ dwarf_attr_name (unsigned int attr)
       return "DW_AT_encoding";
     case DW_AT_external:
       return "DW_AT_external";
+    case DW_AT_explicit:
+      return "DW_AT_explicit";
     case DW_AT_frame_base:
       return "DW_AT_frame_base";
     case DW_AT_friend:
@@ -13624,6 +13626,11 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
 	{
 	  add_AT_flag (subr_die, DW_AT_declaration, 1);
 
+	  /* If this is an explicit function declaration then generate
+	     a DW_AT_explicit attribute.  */
+          if (lang_hooks.decls.function_decl_is_explicit_p (decl))
+	    add_AT_flag (subr_die, DW_AT_explicit, 1);
+
 	  /* The first time we see a member function, it is in the context of
 	     the class to which it belongs.  We make sure of this by emitting
 	     the class first.  The next time is the definition, which is
diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h
index 996e2f2..11da544 100644
--- a/gcc/langhooks-def.h
+++ b/gcc/langhooks-def.h
@@ -189,6 +189,7 @@ extern tree lhd_make_node (enum tree_code);
 #define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
 #define LANG_HOOKS_PUSHDECL	pushdecl
 #define LANG_HOOKS_GETDECLS	getdecls
+#define LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT hook_bool_tree_false
 #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
 #define LANG_HOOKS_WRITE_GLOBALS write_global_declarations
 #define LANG_HOOKS_DECL_OK_FOR_SIBCALL	lhd_decl_ok_for_sibcall
@@ -208,6 +209,7 @@ extern tree lhd_make_node (enum tree_code);
   LANG_HOOKS_GLOBAL_BINDINGS_P, \
   LANG_HOOKS_PUSHDECL, \
   LANG_HOOKS_GETDECLS, \
+  LANG_HOOKS_FUNCTION_DECL_IS_EXPLICIT, \
   LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
   LANG_HOOKS_WRITE_GLOBALS, \
   LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
diff --git a/gcc/langhooks.h b/gcc/langhooks.h
index 752ad99..a192216 100644
--- a/gcc/langhooks.h
+++ b/gcc/langhooks.h
@@ -159,6 +159,9 @@ struct lang_hooks_for_decls
   /* Returns the chain of decls so far in the current scope level.  */
   tree (*getdecls) (void);
 
+  /* Returns true if the constructor is explicit.  */
+  bool (*function_decl_is_explicit_p) (tree);
+
   /* Returns true when we should warn for an unused global DECL.
      We will already have checked that it has static binding.  */
   bool (*warn_unused_global) (const_tree);
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C
new file mode 100644
index 0000000..ba0c162
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C
@@ -0,0 +1,19 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin: PR c++
+// { dg-do compile }
+// { dg-options "-O -g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_explicit" "2" } }
+
+struct Foo
+{
+  Foo () {}
+  explicit Foo (int) {}
+  Foo (char) {}
+  ~Foo () {};
+};
+
+void
+bar ()
+{
+  Foo foo;
+}

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] PR debug/37959
  2008-11-04 21:38       ` Dodji Seketeli
@ 2009-03-18 15:27         ` Jakub Jelinek
  2009-03-18 15:34           ` Richard Guenther
                             ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Jakub Jelinek @ 2009-03-18 15:27 UTC (permalink / raw)
  To: Dodji Seketeli, Jason Merrill; +Cc: gcc-patches

On Tue, Nov 04, 2008 at 10:36:07PM +0100, Dodji Seketeli wrote:
> Jason Merrill a écrit :
>>>     (cp_function_decl_is_constructor_p): New function.
>>
>> Wrong one :)
>
> Oops, fixed in the attached patch.
>
>> Other than that, this looks good, but you'll need to get an OK from a  
>> release manager to check it in on the trunk since it isn't a 
>> regression.
>
> I think I'll just wait for trunk to re-open again then :)

I've looked at this patch and found a couple of issues:
1) having the langhook in cp-lang.c is IMHO wrong, as that will make it
   C++ specific, while we almost certainly want the same for ObjC++
2) using *_is_explicit_p is strange, either *_is_explicit or *_explicit_p
   should be used, the patch below chooses the latter
3) some changes weren't documented in the ChangeLog entry

Below is an updated patch, bootstrapped/regtested on x86_64-linux,
ok for 4.5?

2009-03-18  Dodji Seketeli  <dodji@redhat.com>
	    Jakub Jelinek  <jakub@redhat.com>

	PR debug/37959
	* dwarf2out.c (dwarf_attr_name): Handle DW_AT_explicit attribute.
	(gen_subprogram_die): When a function is explicit, generate the DW_AT_explicit
	attribute.
	* langhooks.h (struct lang_hooks_for_decls): Add function_decl_explicit_p
	langhook.
	* langhooks-def.h (LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P): Define.
	(LANG_HOOKS_DECLS): Add LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P.

	* cp-objcp-common.h (LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P): Define.
	(cp_function_decl_explicit_p): New prototype.
	* cp-objcp-common.c (cp_function_decl_explicit_p): New function.

	* g++.dg/debug/dwarf2/explicit-constructor.C: New test.

--- gcc/cp/cp-objcp-common.c.jj	2009-03-05 22:32:17.000000000 +0100
+++ gcc/cp/cp-objcp-common.c	2009-03-18 14:31:17.000000000 +0100
@@ -1,5 +1,5 @@
 /* Some code common to C++ and ObjC++ front ends.
-   Copyright (C) 2004, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
    Contributed by Ziemowit Laski  <zlaski@apple.com>
 
 This file is part of GCC.
@@ -203,6 +203,16 @@ cxx_staticp (tree arg)
   return NULL_TREE;
 }
 
+/* Return true if DECL is explicit member function.  */
+
+bool
+cp_function_decl_explicit_p (tree decl)
+{
+  return (decl
+	  && FUNCTION_FIRST_USER_PARMTYPE (decl) != void_list_node
+	  && DECL_NONCONVERTING_P (decl));
+}
+
 /* Stubs to keep c-opts.c happy.  */
 void
 push_file_scope (void)
--- gcc/cp/cp-objcp-common.h.jj	2009-03-02 16:21:33.000000000 +0100
+++ gcc/cp/cp-objcp-common.h	2009-03-18 14:33:51.000000000 +0100
@@ -1,5 +1,5 @@
 /* Language hooks common to C++ and ObjC++ front ends.
-   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
    Contributed by Ziemowit Laski  <zlaski@apple.com>
 
 This file is part of GCC.
@@ -26,6 +26,8 @@ along with GCC; see the file COPYING3.  
 extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t,
 					 tree, bool);
 
+extern bool cp_function_decl_explicit_p (tree decl);
+
 /* Lang hooks that are shared between C++ and ObjC++ are defined here.  Hooks
    specific to C++ or ObjC++ go in cp/cp-lang.c and objcp/objcp-lang.c,
    respectively.  */
@@ -131,6 +133,8 @@ extern tree objcp_tsubst_copy_and_build 
 #define LANG_HOOKS_TO_TARGET_CHARSET c_common_to_target_charset
 #undef LANG_HOOKS_GIMPLIFY_EXPR
 #define LANG_HOOKS_GIMPLIFY_EXPR cp_gimplify_expr
+#undef LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P
+#define LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P cp_function_decl_explicit_p
 #undef LANG_HOOKS_OMP_PREDETERMINED_SHARING
 #define LANG_HOOKS_OMP_PREDETERMINED_SHARING cxx_omp_predetermined_sharing
 #undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR
--- gcc/langhooks-def.h.jj	2009-03-18 14:24:43.000000000 +0100
+++ gcc/langhooks-def.h	2009-03-18 14:32:37.000000000 +0100
@@ -190,6 +190,7 @@ extern tree lhd_make_node (enum tree_cod
 #define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
 #define LANG_HOOKS_PUSHDECL	pushdecl
 #define LANG_HOOKS_GETDECLS	getdecls
+#define LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P hook_bool_tree_false
 #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
 #define LANG_HOOKS_WRITE_GLOBALS write_global_declarations
 #define LANG_HOOKS_DECL_OK_FOR_SIBCALL	lhd_decl_ok_for_sibcall
@@ -209,6 +210,7 @@ extern tree lhd_make_node (enum tree_cod
   LANG_HOOKS_GLOBAL_BINDINGS_P, \
   LANG_HOOKS_PUSHDECL, \
   LANG_HOOKS_GETDECLS, \
+  LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P, \
   LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
   LANG_HOOKS_WRITE_GLOBALS, \
   LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
--- gcc/langhooks.h.jj	2009-03-18 14:24:43.000000000 +0100
+++ gcc/langhooks.h	2009-03-18 14:32:06.000000000 +0100
@@ -159,6 +159,9 @@ struct lang_hooks_for_decls
   /* Returns the chain of decls so far in the current scope level.  */
   tree (*getdecls) (void);
 
+  /* Returns true if DECL is explicit member function.  */
+  bool (*function_decl_explicit_p) (tree);
+
   /* Returns true when we should warn for an unused global DECL.
      We will already have checked that it has static binding.  */
   bool (*warn_unused_global) (const_tree);
--- gcc/dwarf2out.c.jj	2009-03-18 14:24:43.000000000 +0100
+++ gcc/dwarf2out.c	2009-03-18 14:33:04.000000000 +0100
@@ -5599,6 +5599,8 @@ dwarf_attr_name (unsigned int attr)
       return "DW_AT_encoding";
     case DW_AT_external:
       return "DW_AT_external";
+    case DW_AT_explicit:
+      return "DW_AT_explicit";
     case DW_AT_frame_base:
       return "DW_AT_frame_base";
     case DW_AT_friend:
@@ -13620,6 +13622,11 @@ gen_subprogram_die (tree decl, dw_die_re
 	{
 	  add_AT_flag (subr_die, DW_AT_declaration, 1);
 
+	  /* If this is an explicit function declaration then generate
+	     a DW_AT_explicit attribute.  */
+          if (lang_hooks.decls.function_decl_explicit_p (decl))
+	    add_AT_flag (subr_die, DW_AT_explicit, 1);
+
 	  /* The first time we see a member function, it is in the context of
 	     the class to which it belongs.  We make sure of this by emitting
 	     the class first.  The next time is the definition, which is
--- gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C.jj	2009-03-18 14:24:55.000000000 +0100
+++ gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C	2009-03-18 14:24:55.000000000 +0100
@@ -0,0 +1,19 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin: PR c++
+// { dg-do compile }
+// { dg-options "-O -g -dA" }
+// { dg-final { scan-assembler-times "DW_AT_explicit" 2 } }
+
+struct Foo
+{
+  Foo () {}
+  explicit Foo (int) {}
+  Foo (char) {}
+  ~Foo () {};
+};
+
+void
+bar ()
+{
+  Foo foo;
+}

	Jakub

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] PR debug/37959
  2009-03-18 15:27         ` Jakub Jelinek
@ 2009-03-18 15:34           ` Richard Guenther
  2009-03-18 16:24             ` Dodji Seketeli
  2009-03-18 15:35           ` Dodji Seketeli
  2009-03-19 16:55           ` Jason Merrill
  2 siblings, 1 reply; 10+ messages in thread
From: Richard Guenther @ 2009-03-18 15:34 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Dodji Seketeli, Jason Merrill, gcc-patches

On Wed, Mar 18, 2009 at 4:24 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Tue, Nov 04, 2008 at 10:36:07PM +0100, Dodji Seketeli wrote:
>> Jason Merrill a écrit :
>>>>     (cp_function_decl_is_constructor_p): New function.
>>>
>>> Wrong one :)
>>
>> Oops, fixed in the attached patch.
>>
>>> Other than that, this looks good, but you'll need to get an OK from a
>>> release manager to check it in on the trunk since it isn't a
>>> regression.
>>
>> I think I'll just wait for trunk to re-open again then :)
>
> I've looked at this patch and found a couple of issues:
> 1) having the langhook in cp-lang.c is IMHO wrong, as that will make it
>   C++ specific, while we almost certainly want the same for ObjC++
> 2) using *_is_explicit_p is strange, either *_is_explicit or *_explicit_p
>   should be used, the patch below chooses the latter
> 3) some changes weren't documented in the ChangeLog entry
>
> Below is an updated patch, bootstrapped/regtested on x86_64-linux,
> ok for 4.5?

Hm, as this langhook will be likely used after the FE should be gone
it would be better to add a flag to the function decl (tree_decl_with_vis,
there are plenty of bits left).

Richard.

> 2009-03-18  Dodji Seketeli  <dodji@redhat.com>
>            Jakub Jelinek  <jakub@redhat.com>
>
>        PR debug/37959
>        * dwarf2out.c (dwarf_attr_name): Handle DW_AT_explicit attribute.
>        (gen_subprogram_die): When a function is explicit, generate the DW_AT_explicit
>        attribute.
>        * langhooks.h (struct lang_hooks_for_decls): Add function_decl_explicit_p
>        langhook.
>        * langhooks-def.h (LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P): Define.
>        (LANG_HOOKS_DECLS): Add LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P.
>
>        * cp-objcp-common.h (LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P): Define.
>        (cp_function_decl_explicit_p): New prototype.
>        * cp-objcp-common.c (cp_function_decl_explicit_p): New function.
>
>        * g++.dg/debug/dwarf2/explicit-constructor.C: New test.
>
> --- gcc/cp/cp-objcp-common.c.jj 2009-03-05 22:32:17.000000000 +0100
> +++ gcc/cp/cp-objcp-common.c    2009-03-18 14:31:17.000000000 +0100
> @@ -1,5 +1,5 @@
>  /* Some code common to C++ and ObjC++ front ends.
> -   Copyright (C) 2004, 2007, 2008 Free Software Foundation, Inc.
> +   Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
>    Contributed by Ziemowit Laski  <zlaski@apple.com>
>
>  This file is part of GCC.
> @@ -203,6 +203,16 @@ cxx_staticp (tree arg)
>   return NULL_TREE;
>  }
>
> +/* Return true if DECL is explicit member function.  */
> +
> +bool
> +cp_function_decl_explicit_p (tree decl)
> +{
> +  return (decl
> +         && FUNCTION_FIRST_USER_PARMTYPE (decl) != void_list_node
> +         && DECL_NONCONVERTING_P (decl));
> +}
> +
>  /* Stubs to keep c-opts.c happy.  */
>  void
>  push_file_scope (void)
> --- gcc/cp/cp-objcp-common.h.jj 2009-03-02 16:21:33.000000000 +0100
> +++ gcc/cp/cp-objcp-common.h    2009-03-18 14:33:51.000000000 +0100
> @@ -1,5 +1,5 @@
>  /* Language hooks common to C++ and ObjC++ front ends.
> -   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
> +   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
>    Contributed by Ziemowit Laski  <zlaski@apple.com>
>
>  This file is part of GCC.
> @@ -26,6 +26,8 @@ along with GCC; see the file COPYING3.
>  extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t,
>                                         tree, bool);
>
> +extern bool cp_function_decl_explicit_p (tree decl);
> +
>  /* Lang hooks that are shared between C++ and ObjC++ are defined here.  Hooks
>    specific to C++ or ObjC++ go in cp/cp-lang.c and objcp/objcp-lang.c,
>    respectively.  */
> @@ -131,6 +133,8 @@ extern tree objcp_tsubst_copy_and_build
>  #define LANG_HOOKS_TO_TARGET_CHARSET c_common_to_target_charset
>  #undef LANG_HOOKS_GIMPLIFY_EXPR
>  #define LANG_HOOKS_GIMPLIFY_EXPR cp_gimplify_expr
> +#undef LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P
> +#define LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P cp_function_decl_explicit_p
>  #undef LANG_HOOKS_OMP_PREDETERMINED_SHARING
>  #define LANG_HOOKS_OMP_PREDETERMINED_SHARING cxx_omp_predetermined_sharing
>  #undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR
> --- gcc/langhooks-def.h.jj      2009-03-18 14:24:43.000000000 +0100
> +++ gcc/langhooks-def.h 2009-03-18 14:32:37.000000000 +0100
> @@ -190,6 +190,7 @@ extern tree lhd_make_node (enum tree_cod
>  #define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
>  #define LANG_HOOKS_PUSHDECL    pushdecl
>  #define LANG_HOOKS_GETDECLS    getdecls
> +#define LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P hook_bool_tree_false
>  #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
>  #define LANG_HOOKS_WRITE_GLOBALS write_global_declarations
>  #define LANG_HOOKS_DECL_OK_FOR_SIBCALL lhd_decl_ok_for_sibcall
> @@ -209,6 +210,7 @@ extern tree lhd_make_node (enum tree_cod
>   LANG_HOOKS_GLOBAL_BINDINGS_P, \
>   LANG_HOOKS_PUSHDECL, \
>   LANG_HOOKS_GETDECLS, \
> +  LANG_HOOKS_FUNCTION_DECL_EXPLICIT_P, \
>   LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
>   LANG_HOOKS_WRITE_GLOBALS, \
>   LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
> --- gcc/langhooks.h.jj  2009-03-18 14:24:43.000000000 +0100
> +++ gcc/langhooks.h     2009-03-18 14:32:06.000000000 +0100
> @@ -159,6 +159,9 @@ struct lang_hooks_for_decls
>   /* Returns the chain of decls so far in the current scope level.  */
>   tree (*getdecls) (void);
>
> +  /* Returns true if DECL is explicit member function.  */
> +  bool (*function_decl_explicit_p) (tree);
> +
>   /* Returns true when we should warn for an unused global DECL.
>      We will already have checked that it has static binding.  */
>   bool (*warn_unused_global) (const_tree);
> --- gcc/dwarf2out.c.jj  2009-03-18 14:24:43.000000000 +0100
> +++ gcc/dwarf2out.c     2009-03-18 14:33:04.000000000 +0100
> @@ -5599,6 +5599,8 @@ dwarf_attr_name (unsigned int attr)
>       return "DW_AT_encoding";
>     case DW_AT_external:
>       return "DW_AT_external";
> +    case DW_AT_explicit:
> +      return "DW_AT_explicit";
>     case DW_AT_frame_base:
>       return "DW_AT_frame_base";
>     case DW_AT_friend:
> @@ -13620,6 +13622,11 @@ gen_subprogram_die (tree decl, dw_die_re
>        {
>          add_AT_flag (subr_die, DW_AT_declaration, 1);
>
> +         /* If this is an explicit function declaration then generate
> +            a DW_AT_explicit attribute.  */
> +          if (lang_hooks.decls.function_decl_explicit_p (decl))
> +           add_AT_flag (subr_die, DW_AT_explicit, 1);
> +
>          /* The first time we see a member function, it is in the context of
>             the class to which it belongs.  We make sure of this by emitting
>             the class first.  The next time is the definition, which is
> --- gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C.jj 2009-03-18 14:24:55.000000000 +0100
> +++ gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C    2009-03-18 14:24:55.000000000 +0100
> @@ -0,0 +1,19 @@
> +// Contributed by Dodji Seketeli <dodji@redhat.com>
> +// Origin: PR c++
> +// { dg-do compile }
> +// { dg-options "-O -g -dA" }
> +// { dg-final { scan-assembler-times "DW_AT_explicit" 2 } }
> +
> +struct Foo
> +{
> +  Foo () {}
> +  explicit Foo (int) {}
> +  Foo (char) {}
> +  ~Foo () {};
> +};
> +
> +void
> +bar ()
> +{
> +  Foo foo;
> +}
>
>        Jakub
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] PR debug/37959
  2009-03-18 15:27         ` Jakub Jelinek
  2009-03-18 15:34           ` Richard Guenther
@ 2009-03-18 15:35           ` Dodji Seketeli
  2009-03-19 16:55           ` Jason Merrill
  2 siblings, 0 replies; 10+ messages in thread
From: Dodji Seketeli @ 2009-03-18 15:35 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Jason Merrill, gcc-patches

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Jakub Jelinek a écrit :

[...]

> 1) having the langhook in cp-lang.c is IMHO wrong, as that will make it
>    C++ specific, while we almost certainly want the same for ObjC++

True, I didn't think about ObjC++.

> 2) using *_is_explicit_p is strange, either *_is_explicit or *_explicit_p
>    should be used, the patch below chooses the latter

It makes sense.

> 3) some changes weren't documented in the ChangeLog entry

Oops. Sorry.

> Below is an updated patch, bootstrapped/regtested on x86_64-linux,
> ok for 4.5?

Looks good to me, FWIW.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org

iEYEARECAAYFAknBFG0ACgkQPejI7lrem2FnoQCbBku8dkzQs1IqeDlpkBnTJFyh
C4wAn1VIYJeUCwq3EP4Jc3f00fGUqF1q
=l866
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] PR debug/37959
  2009-03-18 15:34           ` Richard Guenther
@ 2009-03-18 16:24             ` Dodji Seketeli
  0 siblings, 0 replies; 10+ messages in thread
From: Dodji Seketeli @ 2009-03-18 16:24 UTC (permalink / raw)
  To: Richard Guenther; +Cc: Jakub Jelinek, Jason Merrill, gcc-patches

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Richard Guenther a écrit :

> Hm, as this langhook will be likely used after the FE should be gone
> it would be better to add a flag to the function decl (tree_decl_with_vis,
> there are plenty of bits left).

As it is right now, the langhook is called  the C++ FE once it has built
the type of a class. I don't think it is called after the FE has
finished its job.



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org

iEYEARECAAYFAknBG38ACgkQPejI7lrem2EikQCffCjOdpNuBCnG40xfXBv5CpLa
BXkAnAkhr1hMq1YsSQ66Xv0rvpBvEABs
=tAAs
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] PR debug/37959
  2009-03-18 15:27         ` Jakub Jelinek
  2009-03-18 15:34           ` Richard Guenther
  2009-03-18 15:35           ` Dodji Seketeli
@ 2009-03-19 16:55           ` Jason Merrill
  2 siblings, 0 replies; 10+ messages in thread
From: Jason Merrill @ 2009-03-19 16:55 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Dodji Seketeli, gcc-patches

Jakub Jelinek wrote:
> ok for 4.5?

OK.

Jason

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-03-19 16:38 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-11-03 20:08 [PATCH] PR debug/37959 Dodji Seketeli
2008-11-03 22:03 ` Jason Merrill
2008-11-04 14:06   ` Dodji Seketeli
2008-11-04 17:03     ` Jason Merrill
2008-11-04 21:38       ` Dodji Seketeli
2009-03-18 15:27         ` Jakub Jelinek
2009-03-18 15:34           ` Richard Guenther
2009-03-18 16:24             ` Dodji Seketeli
2009-03-18 15:35           ` Dodji Seketeli
2009-03-19 16:55           ` Jason Merrill

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).