[patch] avoid ICE due to NULL pointer dereference in ipa-comdats.c

Sebastian Pop sebpop@gmail.com
Wed Sep 17 19:59:00 GMT 2014


I got an ICE while building libstdc++ of a cross compiler x86 to aarch64.  I
have a testcase that ICEs on current GCC trunk.  I was trying to painfully
reduce it with creduce, and it is still several thousand lines of c++. Frustrated
that it does not reduce anymore, I decided to have a look with gdb at why the
compiler was iceing: the code dereferences a NULL pointer that we get by looking
up the value of a symbol in a map.  Around that place, there is another pattern
that first makes sure that the pointer we get from the map is non NULL: I copied
that code around and that seemed to have solved the ICE.

Regtested on x86-64-linux, and also checked that my aarch64 cross compilers are
now building correctly libstdc++.

Ok to commit?


>From f5934ecdee5d7e8e143310c21906d5099b9e7d23 Mon Sep 17 00:00:00 2001
From: Sebastian Pop <s.pop@samsung.com>
Date: Wed, 17 Sep 2014 14:04:20 -0500
Subject: [PATCH] avoid dereferencing a NULL pointer

2014-09-17  Sebastian Pop  <s.pop@samsung.com>

	* ipa-comdats.c (ipa_comdats): Check that the value in the map is non
	NULL before dereferencing it.
 gcc/ipa-comdats.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/gcc/ipa-comdats.c b/gcc/ipa-comdats.c
index b270d97..57e8239 100644
--- a/gcc/ipa-comdats.c
+++ b/gcc/ipa-comdats.c
@@ -317,7 +317,13 @@ ipa_comdats (void)
 	  && !symbol->alias
 	  && symbol->real_symbol_p ())
-	  tree group = *map.get (symbol);
+	  tree group = NULL;
+	  /* Get current lattice value of SYMBOL.  */
+	  tree *val = map.get (symbol);
+	  if (val)
+	    group = *val;
+	  else
+	    continue;
 	  if (group == error_mark_node)

More information about the Gcc-patches mailing list