diff options
Diffstat (limited to 'gcc/cp/class.c')
-rw-r--r-- | gcc/cp/class.c | 62 |
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); } |