aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2002-04-11 23:04:09 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2002-04-11 23:04:09 +0200
commit010f87c44f88d3dc30313f1b69f9ed85fe4c6630 (patch)
tree402f6049ff39cd859a6119c0c4355dc42a33f33b /gcc/expr.c
parent578fc63d144bcd49d723090a9c24f4cd69ce621d (diff)
downloadgcc-010f87c44f88d3dc30313f1b69f9ed85fe4c6630.zip
gcc-010f87c44f88d3dc30313f1b69f9ed85fe4c6630.tar.gz
gcc-010f87c44f88d3dc30313f1b69f9ed85fe4c6630.tar.bz2
re PR rtl-optimization/6177 (ia64 ICE with single-element complex array in LAPACK)
PR optimization/6177 * expr.c (expand_expr) [COMPONENT_REF]: Handle op0 CONCAT if bitpos is 0 and bitsize CONCAT size. * gcc.c-torture/execute/20020411-1.c: New test. From-SVN: r52178
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 3e0add2..a9ca3f6 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -6954,6 +6954,16 @@ expand_expr (exp, target, tmode, modifier)
MEM_VOLATILE_P (op0) = 1;
}
+ /* The following code doesn't handle CONCAT.
+ Assume only bitpos == 0 can be used for CONCAT, due to
+ one element arrays having the same mode as its element. */
+ if (GET_CODE (op0) == CONCAT)
+ {
+ if (bitpos != 0 || bitsize != GET_MODE_BITSIZE (GET_MODE (op0)))
+ abort ();
+ return op0;
+ }
+
/* In cases where an aligned union has an unaligned object
as a field, we might be extracting a BLKmode value from
an integer-mode (e.g., SImode) object. Handle this case