From 4e9efe546e1443219d13d8fab76adaed392cd6c7 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 2 Aug 2000 14:28:14 +0000 Subject: [PATCH] i386.c (legitimate_address_p): Accept other bases than pic_offset_table_rtx for GOTOFF constructs. * i386.c (legitimate_address_p): Accept other bases than pic_offset_table_rtx for GOTOFF constructs. From-SVN: r35424 --- gcc/ChangeLog | 5 +++++ gcc/config/i386/i386.c | 29 +++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 90f51cc506e..503f008dc61 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Aug 2 16:26:15 MET DST 2000 Jan Hubicka + + * i386.c (legitimate_address_p): Accept other bases than + pic_offset_table_rtx for GOTOFF constructs. + Wed Aug 2 15:59:34 MET DST 2000 Jan Hubicka * i386.md (shift to lea splitter): Use const_int_operand. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c5289ab836f..68a78e93314 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -2506,14 +2506,27 @@ legitimate_address_p (mode, addr, strict) goto error; } - /* Verify that a symbolic pic displacement includes - the pic_offset_table_rtx register. */ - if (base != pic_offset_table_rtx - && (index != pic_offset_table_rtx || scale != 1)) - { - reason = "pic displacement against invalid base"; - goto error; - } + /* This code used to verify that a symbolic pic displacement + includes the pic_offset_table_rtx register. + + While this is good idea, unfortunately these constructs may + be created by "adds using lea" optimization for incorrect + code like: + + int a; + int foo(int i) + { + return *(&a+i); + } + + This code nonsential, but results in addressing + GOT table with pic_offset_table_rtx base. We can't + just refuse it easilly, since it gets matched by + "addsi3" pattern, that later gets split to lea in the + case output register differs from input. While this + can be handled by separate addsi pattern for this case + that never results in lea, this seems to be easier and + correct fix for crash to disable this test. */ } else if (HALF_PIC_P ()) { -- 2.30.2