Hi! On the following testcase, we have tree initializers that satisfy initializer_constant_valid_p and do: rtl = rtl_for_decl_init (init, type); if (rtl) return add_const_value_attribute (die, rtl); add_const_value_attribute has a list of rtl codes it expects in the initializers (and wants to handle only the simplest cases anyway), but doesn't cover what can appear in these initializers, MINUS for the pointer subtraction and the *_EXTEND for the casts.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2019-03-14 Jakub Jelinek <ja...@redhat.com> PR debug/89704 * dwarf2out.c (add_const_value_attribute): Return false for MINUS, SIGN_EXTEND and ZERO_EXTEND. * gcc.dg/debug/pr89704.c: New test. --- gcc/dwarf2out.c.jj 2019-03-13 21:21:58.000000000 +0100 +++ gcc/dwarf2out.c 2019-03-14 15:31:00.180137759 +0100 @@ -19670,6 +19670,9 @@ add_const_value_attribute (dw_die_ref di case HIGH: case CONST_FIXED: + case MINUS: + case SIGN_EXTEND: + case ZERO_EXTEND: return false; case MEM: --- gcc/testsuite/gcc.dg/debug/pr89704.c.jj 2019-03-14 15:36:39.239657822 +0100 +++ gcc/testsuite/gcc.dg/debug/pr89704.c 2019-03-14 15:36:34.559733459 +0100 @@ -0,0 +1,14 @@ +/* PR debug/89704 */ +/* { dg-do compile } */ + +typedef __INTPTR_TYPE__ intptr_t; + +int +foo (void) +{ + lab1:; + lab2:; + static int i = (intptr_t) &&lab1 - (intptr_t) &&lab2; + static int j = (intptr_t) &&lab1 - (intptr_t) &&lab2; + return i; +} Jakub