diff mbox

Fix PR63649

Message ID 20141027092648.GA348@x4
State New
Headers show

Commit Message

Markus Trippelsdorf Oct. 27, 2014, 9:26 a.m. UTC
When assigning symbols to sections in ipa-comdats.c we currently
segfault when val is NULL. Fix by guarding against this case.

Tested on powerpc64-unknown-linux-gnu.
OK for trunk?

2014-10-27  Markus Trippelsdorf  <markus@trippelsdorf.de> 

	PR ipa/63649
	* ipa-comdats.c (ipa_comdats): Guard against NULL.

	PR ipa/63649
	* g++.dg/ipa/pr63649.C: New test.
diff mbox

Patch

diff --git a/gcc/ipa-comdats.c b/gcc/ipa-comdats.c
index b270d9717b27..8843410545e0 100644
--- a/gcc/ipa-comdats.c
+++ b/gcc/ipa-comdats.c
@@ -317,8 +317,11 @@  ipa_comdats (void)
 	  && !symbol->alias
 	  && symbol->real_symbol_p ())
 	{
-	  tree group = *map.get (symbol);
+	  tree *val = map.get (symbol);
+	  if (!val)
+	    continue;
 
+	  group = *val;
 	  if (group == error_mark_node)
 	    continue;
 	  if (dump_file)
diff --git a/gcc/testsuite/g++.dg/ipa/pr63649.C b/gcc/testsuite/g++.dg/ipa/pr63649.C
new file mode 100644
index 000000000000..1bd1d13aaaf3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr63649.C
@@ -0,0 +1,28 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O1 -std=c++11"  } */
+struct A
+{
+  typedef void Func ();
+  A () = default;
+  void *_base;
+};
+class B
+{
+  struct
+  {
+    void m_fn1 (A::Func);
+  } static b;
+};
+template <typename> class C : B
+{
+public:
+  C ();
+  static void
+  m_fn2 ()
+  {
+  }
+};
+
+A c;
+__attribute__ ((init_priority (0xfffe))) C<int> a;
+template <typename T> C<T>::C () { b.m_fn1 (m_fn2); }