Re: [PATCH] Clear version_info_node in delete_function_version.

2019-11-06 Thread Jeff Law
On 11/5/19 8:12 AM, Martin Liška wrote:
> Hi.
> 
> When calling delete_function_version, we should also clear
> version_info_node once it can be seen GGC collect.
> 
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
> 
> Ready to be installed?
> Thanks,
> Martin
> 
> gcc/ChangeLog:
> 
> 2019-11-05  Martin Liska  
> 
> PR c++/92354
> * cgraph.c (delete_function_version): Clear global
> variable version_info_node if equal to deleted
> function.
> 
> gcc/testsuite/ChangeLog:
> 
> 2019-11-05  Martin Liska  
> 
> PR c++/92354
> * g++.target/i386/pr92354.C: New test.
OK
jeff



[PATCH] Clear version_info_node in delete_function_version.

2019-11-05 Thread Martin Liška

Hi.

When calling delete_function_version, we should also clear
version_info_node once it can be seen GGC collect.

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

gcc/ChangeLog:

2019-11-05  Martin Liska  

PR c++/92354
* cgraph.c (delete_function_version): Clear global
variable version_info_node if equal to deleted
function.

gcc/testsuite/ChangeLog:

2019-11-05  Martin Liska  

PR c++/92354
* g++.target/i386/pr92354.C: New test.
---
 gcc/cgraph.c| 3 +++
 gcc/testsuite/g++.target/i386/pr92354.C | 8 
 2 files changed, 11 insertions(+)
 create mode 100644 gcc/testsuite/g++.target/i386/pr92354.C


diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 699209654f8..896a3fcf275 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -197,6 +197,9 @@ delete_function_version (cgraph_function_version_info *decl_v)
   if (decl_v == NULL)
 return;
 
+  if (version_info_node == decl_v)
+version_info_node = NULL;
+
   if (decl_v->prev != NULL)
 decl_v->prev->next = decl_v->next;
 
diff --git a/gcc/testsuite/g++.target/i386/pr92354.C b/gcc/testsuite/g++.target/i386/pr92354.C
new file mode 100644
index 000..0f48fb72899
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/pr92354.C
@@ -0,0 +1,8 @@
+/* PR c++/92354 */
+/* { dg-do compile } */
+/* { dg-require-ifunc "" }  */
+/* { dg-options "--param ggc-min-heapsize=0" } */
+
+__attribute__ ((target ("default"))) void f ();
+__attribute__ ((target ("sse"))) void f ();
+__attribute__ ((target ("default"))) void f ();