aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/module.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp/module.cc')
-rw-r--r--gcc/cp/module.cc41
1 files changed, 28 insertions, 13 deletions
diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index 81357a8..e9cacf1 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -6733,6 +6733,7 @@ trees_out::core_vals (tree t)
WT (((lang_tree_node *)t)->baselink.binfo);
WT (((lang_tree_node *)t)->baselink.functions);
WT (((lang_tree_node *)t)->baselink.access_binfo);
+ WT (((lang_tree_node *)t)->baselink.common.chain);
break;
case CONSTRAINT_INFO:
@@ -7302,6 +7303,7 @@ trees_in::core_vals (tree t)
RT (((lang_tree_node *)t)->baselink.binfo);
RTU (((lang_tree_node *)t)->baselink.functions);
RT (((lang_tree_node *)t)->baselink.access_binfo);
+ RT (((lang_tree_node *)t)->baselink.common.chain);
break;
case CONSTRAINT_INFO:
@@ -8994,11 +8996,14 @@ trees_in::decl_value ()
dump (dumper::TREE) && dump ("CDTOR %N is %scloned",
decl, cloned_p ? "" : "not ");
if (cloned_p)
- build_cdtor_clones (decl, flags & 2, flags & 4,
- /* Update the member vec, if there is
- one (we're in a different cluster
- to the class defn). */
- CLASSTYPE_MEMBER_VEC (DECL_CONTEXT (decl)));
+ {
+ /* Update the member vec, if there is one (we're in a different
+ cluster to the class defn) and this isn't a primary template
+ specialization (as in tsubst_function_decl). */
+ bool up = (CLASSTYPE_MEMBER_VEC (DECL_CONTEXT (decl))
+ && !primary_template_specialization_p (decl));
+ build_cdtor_clones (decl, flags & 2, flags & 4, up);
+ }
}
}
@@ -13046,12 +13051,11 @@ trees_in::read_var_def (tree decl, tree maybe_template)
if (DECL_EXPLICIT_INSTANTIATION (decl)
&& !DECL_EXTERNAL (decl))
setup_explicit_instantiation_definition_linkage (decl);
- if (DECL_IMPLICIT_INSTANTIATION (decl)
- || (DECL_EXPLICIT_INSTANTIATION (decl)
- && !DECL_EXTERNAL (decl))
- || (DECL_CLASS_SCOPE_P (decl)
- && !DECL_VTABLE_OR_VTT_P (decl)
- && !DECL_TEMPLATE_INFO (decl)))
+ /* Class static data members are handled in read_class_def. */
+ if (!DECL_CLASS_SCOPE_P (decl)
+ && (DECL_IMPLICIT_INSTANTIATION (decl)
+ || (DECL_EXPLICIT_INSTANTIATION (decl)
+ && !DECL_EXTERNAL (decl))))
note_vague_linkage_variable (decl);
}
if (!dyn_init)
@@ -13465,6 +13469,10 @@ trees_in::read_class_def (tree defn, tree maybe_template)
DECL_ACCESS (d) = tree_cons (type, access, list);
}
}
+
+ if (TREE_CODE (decl) == VAR_DECL
+ && TREE_CODE (maybe_template) != TEMPLATE_DECL)
+ note_vague_linkage_variable (decl);
}
}
@@ -17241,13 +17249,16 @@ module_state::write_namespaces (elf_out *to, vec<depset *> spaces,
flags |= 4;
if (DECL_MODULE_EXPORT_P (ns))
flags |= 8;
+ if (TREE_DEPRECATED (ns))
+ flags |= 16;
dump () && dump ("Writing namespace:%u %N%s%s%s%s",
b->cluster, ns,
flags & 1 ? ", public" : "",
flags & 2 ? ", inline" : "",
flags & 4 ? ", purview" : "",
- flags & 8 ? ", export" : "");
+ flags & 8 ? ", export" : "",
+ flags & 16 ? ", deprecated" : "");
sec.u (b->cluster);
sec.u (to->name (DECL_NAME (ns)));
write_namespace (sec, b->deps[0]);
@@ -17323,7 +17334,8 @@ module_state::read_namespaces (unsigned num)
flags & 1 ? ", public" : "",
flags & 2 ? ", inline" : "",
flags & 4 ? ", purview" : "",
- flags & 8 ? ", export" : "");
+ flags & 8 ? ", export" : "",
+ flags & 16 ? ", deprecated" : "");
bool visible_p = ((flags & 8)
|| ((flags & 1)
&& (flags & 4)
@@ -17344,6 +17356,9 @@ module_state::read_namespaces (unsigned num)
DECL_MODULE_EXPORT_P (inner) = true;
}
+ if (flags & 16)
+ TREE_DEPRECATED (inner) = true;
+
if (tags)
DECL_ATTRIBUTES (inner)
= tree_cons (get_identifier ("abi_tag"), tags, DECL_ATTRIBUTES (inner));