http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52329
Bug #: 52329 Summary: Invalid MEM_REF encountered in set_mem_attributes_minus_bitpos Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassig...@gcc.gnu.org ReportedBy: jamb...@gcc.gnu.org CC: ja...@gcc.gnu.org Host: x86_64-suse-linux Target: x86_64-suse-linux Build: x86_64-suse-linux Created attachment 26716 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26716 Preprocessed source Bootstrapping revision 184388 with the following patch Index: gcc/emit-rtl.c =================================================================== --- gcc/emit-rtl.c (revision 184388) +++ gcc/emit-rtl.c (working copy) @@ -1681,6 +1681,7 @@ set_mem_attributes_minus_bitpos (rtx ref MEM_NOTRAP_P (ref) = !tree_could_trap_p (t); base = get_base_address (t); + gcc_assert (base); if (base && DECL_P (base) && TREE_READONLY (base) && (TREE_STATIC (base) || DECL_EXTERNAL (base)) causes an ICE when compiling libstdc++-v3/src/c++98/complex_io.cc because get_base_address stumbles upon encountering an invalid MEM_REF MEM[(struct basic_stringbuf *)&__s._M_stringbuf]._M_string and returns NULL. This expression is passed to it by expand_debug_expr via set_mem_attributes. Attached is the preprocessed testcase, invocation flags are -g -O2 -S