This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[GOOGLE] Check if varpool node exist for decl before checking if it's from auxiliary module.
- From: Dehao Chen <dehao at google dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: David Li <davidxl at google dot com>, Rong Xu <xur at google dot com>
- Date: Tue, 22 Oct 2013 10:51:41 -0700
- Subject: [GOOGLE] Check if varpool node exist for decl before checking if it's from auxiliary module.
- Authentication-results: sourceware.org; auth=none
This is fixing a LIPO bug when there -fexception is on.
When compilation is finished, compile_file calls
dw2_output_indirect_constants, which may generate decls like
DW.ref.__gxx_personality_v0 (generated in
dw2_output_indirect_constant_1). This function is a global function,
but does not have associated varpool node. So original code will
segfault when checking if the varpool node is from auxiliary module.
Verified that the segfault is fixed with the patch. Regression test on-going.
OK for google-4_8 branch if reg test is green?
Thanks,
Dehao
Index: gcc/varasm.c
===================================================================
--- gcc/varasm.c (revision 203910)
+++ gcc/varasm.c (working copy)
@@ -1484,7 +1484,7 @@ notice_global_symbol (tree decl)
if (L_IPO_COMP_MODE
&& ((TREE_CODE (decl) == FUNCTION_DECL
&& cgraph_is_auxiliary (decl))
- || (TREE_CODE (decl) == VAR_DECL
+ || (TREE_CODE (decl) == VAR_DECL && varpool_get_node (decl)
&& varpool_is_auxiliary (varpool_get_node (decl)))))
return;