aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/class.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp/class.c')
-rw-r--r--gcc/cp/class.c62
1 files changed, 9 insertions, 53 deletions
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index dab1630..34d10ba 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -1047,19 +1047,7 @@ add_method (tree type, tree method, tree using_decl)
if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (method))
slot = CLASSTYPE_CONSTRUCTOR_SLOT;
else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (method))
- {
- slot = CLASSTYPE_DESTRUCTOR_SLOT;
-
- if (TYPE_FOR_JAVA (type))
- {
- if (!DECL_ARTIFICIAL (method))
- error ("Java class %qT cannot have a destructor", type);
- else if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
- error ("Java class %qT cannot have an implicit non-trivial "
- "destructor",
- type);
- }
- }
+ slot = CLASSTYPE_DESTRUCTOR_SLOT;
else
{
tree m;
@@ -3349,17 +3337,8 @@ add_implicitly_declared_members (tree t, tree* access_decls,
/* Destructor. */
if (!CLASSTYPE_DESTRUCTORS (t))
- {
- /* In general, we create destructors lazily. */
- CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
-
- if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
- && TYPE_FOR_JAVA (t))
- /* But if this is a Java class, any non-trivial destructor is
- invalid, even if compiler-generated. Therefore, if the
- destructor is non-trivial we create it now. */
- lazily_declare_fn (sfk_destructor, t);
- }
+ /* In general, we create destructors lazily. */
+ CLASSTYPE_LAZY_DESTRUCTOR (t) = 1;
/* [class.ctor]
@@ -3382,7 +3361,7 @@ add_implicitly_declared_members (tree t, tree* access_decls,
If a class definition does not explicitly declare a copy
constructor, one is declared implicitly. */
- if (! TYPE_HAS_COPY_CTOR (t) && ! TYPE_FOR_JAVA (t))
+ if (! TYPE_HAS_COPY_CTOR (t))
{
TYPE_HAS_COPY_CTOR (t) = 1;
TYPE_HAS_CONST_COPY_CTOR (t) = !cant_have_const_cctor;
@@ -3395,7 +3374,7 @@ add_implicitly_declared_members (tree t, tree* access_decls,
when it is needed. For now, just record whether or not the type
of the parameter to the assignment operator will be a const or
non-const reference. */
- if (!TYPE_HAS_COPY_ASSIGN (t) && !TYPE_FOR_JAVA (t))
+ if (!TYPE_HAS_COPY_ASSIGN (t))
{
TYPE_HAS_COPY_ASSIGN (t) = 1;
TYPE_HAS_CONST_COPY_ASSIGN (t) = !cant_have_const_assignment;
@@ -6653,8 +6632,7 @@ determine_key_method (tree type)
{
tree method;
- if (TYPE_FOR_JAVA (type)
- || processing_template_decl
+ if (processing_template_decl
|| CLASSTYPE_TEMPLATE_INSTANTIATION (type)
|| CLASSTYPE_INTERFACE_KNOWN (type))
return;
@@ -7095,9 +7073,7 @@ finish_struct_1 (tree t)
/* Build the VTT for T. */
build_vtt (t);
- /* This warning does not make sense for Java classes, since they
- cannot have destructors. */
- if (!TYPE_FOR_JAVA (t) && warn_nonvdtor
+ if (warn_nonvdtor
&& TYPE_POLYMORPHIC_P (t) && accessible_nvdtor_p (t)
&& !CLASSTYPE_FINAL (t))
warning (OPT_Wnon_virtual_dtor,
@@ -7832,29 +7808,9 @@ push_lang_context (tree name)
vec_safe_push (current_lang_base, current_lang_name);
if (name == lang_name_cplusplus)
- {
- current_lang_name = name;
- }
- else if (name == lang_name_java)
- {
- current_lang_name = name;
- /* DECL_IGNORED_P is initially set for these types, to avoid clutter.
- (See record_builtin_java_type in decl.c.) However, that causes
- incorrect debug entries if these types are actually used.
- So we re-enable debug output after extern "Java". */
- DECL_IGNORED_P (TYPE_NAME (java_byte_type_node)) = 0;
- DECL_IGNORED_P (TYPE_NAME (java_short_type_node)) = 0;
- DECL_IGNORED_P (TYPE_NAME (java_int_type_node)) = 0;
- DECL_IGNORED_P (TYPE_NAME (java_long_type_node)) = 0;
- DECL_IGNORED_P (TYPE_NAME (java_float_type_node)) = 0;
- DECL_IGNORED_P (TYPE_NAME (java_double_type_node)) = 0;
- DECL_IGNORED_P (TYPE_NAME (java_char_type_node)) = 0;
- DECL_IGNORED_P (TYPE_NAME (java_boolean_type_node)) = 0;
- }
+ current_lang_name = name;
else if (name == lang_name_c)
- {
- current_lang_name = name;
- }
+ current_lang_name = name;
else
error ("language string %<\"%E\"%> not recognized", name);
}