diff options
author | Richard Guenther <rguenther@suse.de> | 2010-02-05 15:31:15 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-02-05 15:31:15 +0000 |
commit | 532df904603fa7846b4f9b3cfa1ba83fcd499985 (patch) | |
tree | 9886dafb7bd09ee3c71d1e400ba40a10a4dcf1cd | |
parent | 5c95f07b6154507f16f349d69f0aef23266c81ac (diff) | |
download | gcc-532df904603fa7846b4f9b3cfa1ba83fcd499985.zip gcc-532df904603fa7846b4f9b3cfa1ba83fcd499985.tar.gz gcc-532df904603fa7846b4f9b3cfa1ba83fcd499985.tar.bz2 |
re PR lto/42762 (ICE in get_resolution() when compiling a C++ program with -flto -fuse-linker-plugin)
2010-02-05 Richard Guenther <rguenther@suse.de>
PR lto/42762
* lto-streamer-in.c (get_resolution): Deal with references
to undefined functions.
From-SVN: r156520
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto-streamer-in.c | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1fe28e5..b7548b9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2010-02-05 Richard Guenther <rguenther@suse.de> + PR lto/42762 + * lto-streamer-in.c (get_resolution): Deal with references + to undefined functions. + +2010-02-05 Richard Guenther <rguenther@suse.de> + * tree-ssa-ccp.c (get_symbol_constant_value): Strip all conversions. (fold_const_aggregate_ref): Likewise. diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c index e419177..0955914 100644 --- a/gcc/lto-streamer-in.c +++ b/gcc/lto-streamer-in.c @@ -1515,12 +1515,15 @@ get_resolution (struct data_in *data_in, unsigned index) if (data_in->globals_resolution) { ld_plugin_symbol_resolution_t ret; - gcc_assert (index < VEC_length (ld_plugin_symbol_resolution_t, - data_in->globals_resolution)); + /* We can have references to not emitted functions in + DECL_FUNCTION_PERSONALITY at least. So we can and have + to indeed return LDPR_UNKNOWN in some cases. */ + if (VEC_length (ld_plugin_symbol_resolution_t, + data_in->globals_resolution) <= index) + return LDPR_UNKNOWN; ret = VEC_index (ld_plugin_symbol_resolution_t, data_in->globals_resolution, index); - gcc_assert (ret != LDPR_UNKNOWN); return ret; } else |