+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>
PR tree-optimization/44977
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);
+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>
PR tree-optimization/44977
--- /dev/null
+/* 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;
+}