expr.c (expand_expr_real_1): Always return 0 for the extraction of a bit-field of null size.

* expr.c (expand_expr_real_1) <normal_inner_ref>: Always return 0 for
	the extraction of a bit-field of null size.

From-SVN: r205855
This commit is contained in:
Eric Botcazou 2013-12-10 11:07:28 +00:00 committed by Eric Botcazou
parent ed9e19a494
commit ae3df2dc0a
2 changed files with 14 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2013-12-10 Eric Botcazou <ebotcazou@adacore.com>
* expr.c (expand_expr_real_1) <normal_inner_ref>: Always return 0 for
the extraction of a bit-field of null size.
2013-12-10 Marek Polacek <polacek@redhat.com>
PR sanitizer/59437

View File

@ -10157,6 +10157,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
if (target == 0)
target = assign_temp (type, 1, 1);
/* ??? Unlike the similar test a few lines below, this one is
very likely obsolete. */
if (bitsize == 0)
return target;
@ -10177,6 +10179,13 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
return target;
}
/* If we have nothing to extract, the result will be 0 for targets
with SHIFT_COUNT_TRUNCATED == 0 and garbage otherwise. Always
return 0 for the sake of consistency, as reading a zero-sized
bitfield is valid in Ada and the value is fully specified. */
if (bitsize == 0)
return const0_rtx;
op0 = validize_mem (op0);
if (MEM_P (op0) && REG_P (XEXP (op0, 0)))