re PR debug/45003 (VTA issues with sign/zero extension and debug temporaries)

PR debug/45003
	* cfgexpand.c (expand_debug_expr) <case NOP_EXPR>: Use ZERO_EXTEND
	or SIGN_EXTEND depending on TYPE_UNSIGNED of the operand's type
	instead of the result's type.

	* gcc.dg/guality/pr45003-1.c: New test.

From-SVN: r162336
This commit is contained in:
Jakub Jelinek 2010-07-20 14:58:03 +02:00 committed by Jakub Jelinek
parent 720151cabd
commit 68eaf35cdb
4 changed files with 44 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2010-07-20 Jakub Jelinek <jakub@redhat.com>
PR debug/45003
* cfgexpand.c (expand_debug_expr) <case NOP_EXPR>: Use ZERO_EXTEND
or SIGN_EXTEND depending on TYPE_UNSIGNED of the operand's type
instead of the result's type.
2010-07-20 Richard Guenther <rguenther@suse.de> 2010-07-20 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44977 PR tree-optimization/44977

View File

@ -2427,7 +2427,7 @@ expand_debug_expr (tree exp)
op0 = simplify_gen_subreg (mode, op0, inner_mode, op0 = simplify_gen_subreg (mode, op0, inner_mode,
subreg_lowpart_offset (mode, subreg_lowpart_offset (mode,
inner_mode)); inner_mode));
else if (unsignedp) else if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))))
op0 = gen_rtx_ZERO_EXTEND (mode, op0); op0 = gen_rtx_ZERO_EXTEND (mode, op0);
else else
op0 = gen_rtx_SIGN_EXTEND (mode, op0); op0 = gen_rtx_SIGN_EXTEND (mode, op0);

View File

@ -1,3 +1,8 @@
2010-07-20 Jakub Jelinek <jakub@redhat.com>
PR debug/45003
* gcc.dg/guality/pr45003-1.c: New test.
2010-07-20 Richard Guenther <rguenther@suse.de> 2010-07-20 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44977 PR tree-optimization/44977

View File

@ -0,0 +1,31 @@
/* PR debug/45003 */
/* { dg-do run { target { x86_64-*-* && lp64 } } } */
/* { dg-options "-g" } */
int __attribute__((noinline))
foo (unsigned short *p)
{
int a = *p;
asm volatile ("nop");
asm volatile ("nop" : : "D" (a)); /* { dg-final { gdb-test 10 "a" "0x8078" } } */
return 0;
}
int __attribute__((noinline))
bar (short *p)
{
unsigned int a = *p;
asm volatile ("nop");
asm volatile ("nop" : : "D" (a)); /* { dg-final { gdb-test 19 "a" "0xffff8078" } } */
return 0;
}
int
main ()
{
unsigned short us = 0x8078;
foo (&us);
short s = -32648;
bar (&s);
return 0;
}