static int dtor_nothrow (tree type) { if (type == NULL_TREE) return 0; if (! TYPE_HAS_DESTRUCTOR (type)) return 1; return TREE_NOTHROW (CLASSTYPE_DESTRUCTORS (type)); }
static int dtor_nothrow (tree type) { if (type == NULL_TREE) return 0; if (!CLASS_TYPE_P (type)) return 1; if (CLASSTYPE_LAZY_DESTRUCTOR (type)) lazily_declare_fn (sfk_destructor, type); return TREE_NOTHROW (CLASSTYPE_DESTRUCTORS (type)); }
static int dtor_nothrow (tree type) { if (type == NULL_TREE || type == error_mark_node) return 0; if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type)) return 1; if (CLASSTYPE_LAZY_DESTRUCTOR (type)) lazily_declare_fn (sfk_destructor, type); return TREE_NOTHROW (CLASSTYPE_DESTRUCTORS (type)); }
void emit_support_tinfos (void) { static tree *const fundamentals[] = { &void_type_node, &boolean_type_node, &wchar_type_node, &char_type_node, &signed_char_type_node, &unsigned_char_type_node, &short_integer_type_node, &short_unsigned_type_node, &integer_type_node, &unsigned_type_node, &long_integer_type_node, &long_unsigned_type_node, &long_long_integer_type_node, &long_long_unsigned_type_node, &float_type_node, &double_type_node, &long_double_type_node, 0 }; int ix; tree bltn_type, dtor; push_nested_namespace (abi_node); bltn_type = xref_tag (class_type, get_identifier ("__fundamental_type_info"), /* APPLE LOCAL 4184203 */ /*tag_scope=*/ts_global, false); pop_nested_namespace (abi_node); if (!COMPLETE_TYPE_P (bltn_type)) return; dtor = CLASSTYPE_DESTRUCTORS (bltn_type); if (!dtor || DECL_EXTERNAL (dtor)) return; doing_runtime = 1; for (ix = 0; fundamentals[ix]; ix++) { tree bltn = *fundamentals[ix]; tree types[3]; int i; types[0] = bltn; types[1] = build_pointer_type (bltn); types[2] = build_pointer_type (build_qualified_type (bltn, TYPE_QUAL_CONST)); for (i = 0; i < 3; ++i) { tree tinfo; tinfo = get_tinfo_decl (types[i]); TREE_USED (tinfo) = 1; mark_needed (tinfo); /* APPLE LOCAL begin mainline 4.3 2006-01-10 4871915 */ /* The C++ ABI requires that these objects be COMDAT. But, On systems without weak symbols, initialized COMDAT objects are emitted with internal linkage. (See comdat_linkage for details.) Since we want these objects to have external linkage so that copies do not have to be emitted in code outside the runtime library, we make them non-COMDAT here. It might also not be necessary to follow this detail of the ABI. */ if (!flag_weak || ! targetm.cxx.library_rtti_comdat ()) /* APPLE LOCAL end mainline 4.3 2006-01-10 4871915 */ { gcc_assert (TREE_PUBLIC (tinfo) && !DECL_COMDAT (tinfo)); DECL_INTERFACE_KNOWN (tinfo) = 1; } } } }