diff options
Diffstat (limited to 'gcc/except.c')
-rw-r--r-- | gcc/except.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/except.c b/gcc/except.c index 26a231b87db..08c0aa27ab2 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -2993,6 +2993,16 @@ expand_builtin_extract_return_addr (addr_tree) { rtx addr = expand_expr (addr_tree, NULL_RTX, Pmode, 0); + if (GET_MODE (addr) != Pmode + && GET_MODE (addr) != VOIDmode) + { +#ifdef POINTERS_EXTEND_UNSIGNED + addr = convert_memory_address (Pmode, addr); +#else + addr = convert_to_mode (Pmode, addr, 0); +#endif + } + /* First mask out any unwanted bits. */ #ifdef MASK_RETURN_ADDR expand_and (Pmode, addr, MASK_RETURN_ADDR, addr); |