diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-10-21 17:11:48 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-10-21 17:11:48 +0200 |
commit | 8e6982f7aac4c8d539f194e302fb67179f98c3f1 (patch) | |
tree | 23d9b415e858a7e4be5217e8b836ea49a685e47b | |
parent | f9faea3725f6064ab226f1089d255b4f23bc5bef (diff) | |
download | gcc-8e6982f7aac4c8d539f194e302fb67179f98c3f1.zip gcc-8e6982f7aac4c8d539f194e302fb67179f98c3f1.tar.gz gcc-8e6982f7aac4c8d539f194e302fb67179f98c3f1.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/cp-objcp-common.c | 5 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/dwarf2/constexpr-var-1.C | 9 |
6 files changed, 36 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c81903..b0bf6e2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 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 even for -fstack-reuse=none, or for volatile vars etc. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d2e6fa8..f2c23a2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +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> * cp-objcp-common.h (cp_function_decl_explicit_p, diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c index abcc1ca..50ac07f0 100644 --- a/gcc/cp/cp-objcp-common.c +++ b/gcc/cp/cp-objcp-common.c @@ -168,6 +168,11 @@ cp_decl_dwarf_attribute (const_tree decl, int attr) } break; + case DW_AT_const_expr: + if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl)) + return 1; + break; + default: break; } diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 1d2e385..3e3dea9 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -21264,6 +21264,7 @@ gen_variable_die (tree decl, tree origin, dw_die_ref context_die) tree ultimate_origin; dw_die_ref var_die; dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL; + dw_die_ref origin_die = NULL; bool declaration = (DECL_EXTERNAL (decl_or_origin) || class_or_namespace_scope_p (context_die)); bool specialization_p = false; @@ -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); 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 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) } else 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. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 83414ed..fafdbfc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +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> PR fortran/69566 diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/constexpr-var-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/constexpr-var-1.C new file mode 100644 index 0000000..045d5fe --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/constexpr-var-1.C @@ -0,0 +1,9 @@ +// { 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; |