diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-10-09 22:31:53 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-10-09 22:31:53 +0000 |
commit | 8d134460bb9f43abd6745039bcd0f1cb661ecce0 (patch) | |
tree | 8ac7173644937212b4dfddf787410b0ecfa43674 /gcc/lto-streamer-in.c | |
parent | bb1fa9b5643837c0077d1c0fddfa94e9335b86a0 (diff) | |
download | gcc-8d134460bb9f43abd6745039bcd0f1cb661ecce0.tar.gz |
2009-10-09 Richard Guenther <rguenther@suse.de>
PR lto/41638
* target-def.h (TARGET_BUILTIN_DECL): Define.
(TARGET_INITIALIZER): Add TARGET_BUILTIN_DECL.
* target.h (struct gcc_target): Add builtin_decl target hook.
* doc/tm.texi (TARGET_BUILTIN_DECL): Document.
* lto-streamer-in.c (lto_get_builtin_tree): Fix handling of
target builtins.
* lto-streamer-out.c (lto_output_tree_pointers): Use sorry,
not gcc_unreachable.
(lto_output_builtin_tree): Sorry if the target does not support
streaming target builtins.
* config/rs6000/rs6000.c (TARGET_BUILTIN_DECL): Define.
(rs6000_builtin_decl): New function.
* config/i386/i386.c (TARGET_BUILTIN_DECL): Define.
(ix86_builtin_decl): New function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@152606 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lto-streamer-in.c')
-rw-r--r-- | gcc/lto-streamer-in.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c index f41aa75b823..d9c207d0b7f 100644 --- a/gcc/lto-streamer-in.c +++ b/gcc/lto-streamer-in.c @@ -2377,13 +2377,22 @@ lto_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in) gcc_assert (fclass == BUILT_IN_NORMAL || fclass == BUILT_IN_MD); fcode = (enum built_in_function) lto_input_uleb128 (ib); - gcc_assert (fcode < END_BUILTINS); ix = lto_input_sleb128 (ib); gcc_assert (ix == (int) ix); - result = built_in_decls[fcode]; - gcc_assert (result); + if (fclass == BUILT_IN_NORMAL) + { + gcc_assert (fcode < END_BUILTINS); + result = built_in_decls[fcode]; + gcc_assert (result); + } + else if (fclass == BUILT_IN_MD) + { + result = targetm.builtin_decl (fcode, true); + if (!result || result == error_mark_node) + fatal_error ("target specific builtin not available"); + } asmname = input_string (data_in, ib); if (asmname) |