From: Jakub Jelinek Date: Tue, 20 Jul 2010 12:58:03 +0000 (+0200) Subject: re PR debug/45003 (VTA issues with sign/zero extension and debug temporaries) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=68eaf35cdb86ba13abb14330cc2a4a9b266242ef;p=gcc.git re PR debug/45003 (VTA issues with sign/zero extension and debug temporaries) PR debug/45003 * cfgexpand.c (expand_debug_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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2065af693fa..f7598eb8d1d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-07-20 Jakub Jelinek + + PR debug/45003 + * cfgexpand.c (expand_debug_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 PR tree-optimization/44977 diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index d8378ee14b6..3d7bdd0f81d 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -2427,7 +2427,7 @@ expand_debug_expr (tree exp) op0 = simplify_gen_subreg (mode, op0, inner_mode, subreg_lowpart_offset (mode, inner_mode)); - else if (unsignedp) + else if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)))) op0 = gen_rtx_ZERO_EXTEND (mode, op0); else op0 = gen_rtx_SIGN_EXTEND (mode, op0); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ae38e84e348..391d88f0a76 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-20 Jakub Jelinek + + PR debug/45003 + * gcc.dg/guality/pr45003-1.c: New test. + 2010-07-20 Richard Guenther PR tree-optimization/44977 diff --git a/gcc/testsuite/gcc.dg/guality/pr45003-1.c b/gcc/testsuite/gcc.dg/guality/pr45003-1.c new file mode 100644 index 00000000000..7cef8f6284c --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr45003-1.c @@ -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; +}