aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-02-05 15:31:15 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-02-05 15:31:15 +0000
commit532df904603fa7846b4f9b3cfa1ba83fcd499985 (patch)
tree9886dafb7bd09ee3c71d1e400ba40a10a4dcf1cd /gcc
parent5c95f07b6154507f16f349d69f0aef23266c81ac (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/lto-streamer-in.c9
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