Commit 8e6982f7 by Jakub Jelinek Committed by Jakub Jelinek

dwarf2out.c (gen_variable_die): Emit DW_AT_const_expr attribute if needed.

	* dwarf2out.c (gen_variable_die): Emit DW_AT_const_expr attribute
	if needed.  Re-add origin_die variable and its initialization.
cp/
	* cp-objcp-common.c (cp_decl_dwarf_attribute): Handle
	DW_AT_const_expr.
testsuite/
	* g++.dg/debug/dwarf2/constexpr-var-1.C: New test.

From-SVN: r241408
parent f9faea37
2016-10-21 Jakub Jelinek <jakub@redhat.com> 2016-10-21 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (gen_variable_die): Emit DW_AT_const_expr attribute
if needed. Re-add origin_die variable and its initialization.
* gimplify.c (gimplify_bind_expr): Handle oacc_declare_returns * gimplify.c (gimplify_bind_expr): Handle oacc_declare_returns
even for -fstack-reuse=none, or for volatile vars etc. even for -fstack-reuse=none, or for volatile vars etc.
......
2016-10-21 Jakub Jelinek <jakub@redhat.com>
* cp-objcp-common.c (cp_decl_dwarf_attribute): Handle
DW_AT_const_expr.
2016-10-17 Jakub Jelinek <jakub@redhat.com> 2016-10-17 Jakub Jelinek <jakub@redhat.com>
* cp-objcp-common.h (cp_function_decl_explicit_p, * cp-objcp-common.h (cp_function_decl_explicit_p,
......
...@@ -168,6 +168,11 @@ cp_decl_dwarf_attribute (const_tree decl, int attr) ...@@ -168,6 +168,11 @@ cp_decl_dwarf_attribute (const_tree decl, int attr)
} }
break; break;
case DW_AT_const_expr:
if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
return 1;
break;
default: default:
break; break;
} }
......
...@@ -21264,6 +21264,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die) ...@@ -21264,6 +21264,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
tree ultimate_origin; tree ultimate_origin;
dw_die_ref var_die; dw_die_ref var_die;
dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL; dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
dw_die_ref origin_die = NULL;
bool declaration = (DECL_EXTERNAL (decl_or_origin) bool declaration = (DECL_EXTERNAL (decl_or_origin)
|| class_or_namespace_scope_p (context_die)); || class_or_namespace_scope_p (context_die));
bool specialization_p = false; bool specialization_p = false;
...@@ -21423,7 +21424,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die) ...@@ -21423,7 +21424,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
var_die = new_die (DW_TAG_variable, context_die, decl); var_die = new_die (DW_TAG_variable, context_die, decl);
if (origin != NULL) if (origin != NULL)
add_abstract_origin_attribute (var_die, origin); origin_die = add_abstract_origin_attribute (var_die, origin);
/* Loop unrolling can create multiple blocks that refer to the same /* Loop unrolling can create multiple blocks that refer to the same
static variable, so we must test for the DW_AT_declaration flag. static variable, so we must test for the DW_AT_declaration flag.
...@@ -21509,6 +21510,14 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die) ...@@ -21509,6 +21510,14 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
} }
else else
tree_add_const_value_attribute_for_decl (var_die, decl_or_origin); tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
if ((dwarf_version >= 4 || !dwarf_strict)
&& lang_hooks.decls.decl_dwarf_attribute (decl_or_origin,
DW_AT_const_expr) == 1
&& !get_AT (var_die, DW_AT_const_expr)
&& (origin_die == NULL || get_AT (origin_die, DW_AT_const_expr) == NULL)
&& !specialization_p)
add_AT_flag (var_die, DW_AT_const_expr, 1);
} }
/* Generate a DIE to represent a named constant. */ /* Generate a DIE to represent a named constant. */
......
2016-10-21 Jakub Jelinek <jakub@redhat.com>
* g++.dg/debug/dwarf2/constexpr-var-1.C: New test.
2016-10-21 Paul Thomas <pault@gcc.gnu.org> 2016-10-21 Paul Thomas <pault@gcc.gnu.org>
PR fortran/69566 PR fortran/69566
......
// { dg-do compile }
// { dg-options "-O -std=c++11 -g -dA -gno-strict-dwarf" }
// { dg-final { scan-assembler-times " DW_AT_const_expr" 2 } }
constexpr int a = 5;
struct S
{
static constexpr int b = 6;
} s;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment