diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2016-10-13 15:26:54 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2016-10-13 15:26:54 -0400 |
commit | 14a2c9aac04f013245e332b9e7ecb8c3a9f42a0a (patch) | |
tree | 96a256d961ae6d285efeaf0bfc8c5baa96931f31 /gcc/dwarf2out.c | |
parent | fc0911e0b86076b3241f19df921acf46f0890a59 (diff) | |
download | gcc-14a2c9aac04f013245e332b9e7ecb8c3a9f42a0a.zip gcc-14a2c9aac04f013245e332b9e7ecb8c3a9f42a0a.tar.gz gcc-14a2c9aac04f013245e332b9e7ecb8c3a9f42a0a.tar.bz2 |
Implement P0386R2 - C++17 inline variables
2016-10-11 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (gen_member_die): Handle inline static data member
definitions.
c-family/
* c-cppbuiltin.c (c_cpp_builtins): Add __cpp_inline_variables.
cp/
* cp-tree.h (struct lang_type): Shrink language field to 1 bit
from 4. Add var_declared_inline_p field. Mention 2 spare bits.
(DECL_VAR_DECLARED_INLINE_P): Define.
(SET_DECL_VAR_DECLARED_INLINE_P): Define.
(DECL_INLINE_VAR_P): Define.
(diagnose_inline_vars_for_namespace): Declare.
* decl.c (diagnose_inline_vars_for_namespace): New function.
(duplicate_decls): For static data members copy
DECL_DECLARED_CONSTEXPR_P.
(redeclaration_error_message): Handle C++17 redundant redeclaration
of constexpr static data member outside of class.
(maybe_commonize_var): Handle inline variables.
(check_initializer): Ignore inline variables for diagnostics.
Adjust diagnostic wording for C++17.
(make_rtl_for_nonlocal_decl): Allow in-class definition of
inline static data members.
(bad_specifiers): Don't diagnose inline on variables here.
(grokvardecl): Add inlinep argument, non-static const inline variables
are TREE_PUBLIC.
(check_static_variable_definition): Return early also for inline
variables.
(grokdeclarator): Handle inline variables and inline static data
members.
* typeck2.c (store_init_value): Don't diagnose non-constant
initializers for non-constexpr inline static data members.
* decl2.c (vague_linkage_p): Return true for inline variables.
(c_parse_final_cleanups): In-class declaration of inline static
data members is a definition. Call diagnose_inline_vars_for_namespace
through walk_namespaces.
* pt.c (instantiate_decl): Set pattern_defined for in-class definitions
of inline static data members.
From-SVN: r241137
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 4376751..541faf7 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -22653,7 +22653,18 @@ gen_member_die (tree type, dw_die_ref context_die) child = lookup_decl_die (member); if (child) - splice_child_die (context_die, child); + { + /* Handle inline static data members, which only have in-class + declarations. */ + if (child->die_tag == DW_TAG_variable + && child->die_parent == comp_unit_die ()) + { + reparent_child (child, context_die); + child->die_tag = DW_TAG_member; + } + else + splice_child_die (context_die, child); + } /* Do not generate standard DWARF for variant parts if we are generating the corresponding GNAT encodings: DIEs generated for both would |