aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/cp-objcp-common.c
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2021-09-13 19:49:49 +0200
committerThomas Koenig <tkoenig@gcc.gnu.org>2021-09-13 19:49:49 +0200
commitb18a97e5dd0935e1c4a626c230f21457d0aad3d5 (patch)
treec1818f41af6fe780deafb6cd6a183f32085fe654 /gcc/cp/cp-objcp-common.c
parente76a53644c9d70e998c0d050e9a456af388c6b61 (diff)
downloadgcc-b18a97e5dd0935e1c4a626c230f21457d0aad3d5.zip
gcc-b18a97e5dd0935e1c4a626c230f21457d0aad3d5.tar.gz
gcc-b18a97e5dd0935e1c4a626c230f21457d0aad3d5.tar.bz2
Merged current trunk to branch.
Diffstat (limited to 'gcc/cp/cp-objcp-common.c')
-rw-r--r--gcc/cp/cp-objcp-common.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c
index 84f0b59..28f2d7b 100644
--- a/gcc/cp/cp-objcp-common.c
+++ b/gcc/cp/cp-objcp-common.c
@@ -1,5 +1,5 @@
/* Some code common to C++ and ObjC++ front ends.
- Copyright (C) 2004-2020 Free Software Foundation, Inc.
+ Copyright (C) 2004-2021 Free Software Foundation, Inc.
Contributed by Ziemowit Laski <zlaski@apple.com>
This file is part of GCC.
@@ -72,10 +72,13 @@ cp_tree_size (enum tree_code code)
case DEFERRED_NOEXCEPT: return sizeof (tree_deferred_noexcept);
case OVERLOAD: return sizeof (tree_overload);
case STATIC_ASSERT: return sizeof (tree_static_assert);
- case TYPE_ARGUMENT_PACK:
- case TYPE_PACK_EXPANSION: return sizeof (tree_type_non_common);
- case NONTYPE_ARGUMENT_PACK:
- case EXPR_PACK_EXPANSION: return sizeof (tree_exp);
+#if 0
+ /* This would match cp_common_init_ts, but breaks GC because
+ tree_node_structure_for_code returns TS_TYPE_NON_COMMON for all
+ types. */
+ case UNBOUND_CLASS_TEMPLATE:
+ case TYPE_ARGUMENT_PACK: return sizeof (tree_type_common);
+#endif
case ARGUMENT_PACK_SELECT: return sizeof (tree_argument_pack_select);
case TRAIT_EXPR: return sizeof (tree_trait_expr);
case LAMBDA_EXPR: return sizeof (tree_lambda_expr);
@@ -314,6 +317,15 @@ cxx_block_may_fallthru (const_tree stmt)
return true;
return block_may_fallthru (ELSE_CLAUSE (stmt));
+ case CLEANUP_STMT:
+ /* Just handle the try/finally cases. */
+ if (!CLEANUP_EH_ONLY (stmt))
+ {
+ return (block_may_fallthru (CLEANUP_BODY (stmt))
+ && block_may_fallthru (CLEANUP_EXPR (stmt)));
+ }
+ return true;
+
default:
return c_block_may_fallthru (stmt);
}
@@ -390,6 +402,7 @@ names_builtin_p (const char *name)
case RID_BUILTIN_CONVERTVECTOR:
case RID_BUILTIN_HAS_ATTRIBUTE:
case RID_BUILTIN_SHUFFLE:
+ case RID_BUILTIN_SHUFFLEVECTOR:
case RID_BUILTIN_LAUNDER:
case RID_BUILTIN_BIT_CAST:
case RID_OFFSETOF:
@@ -409,7 +422,9 @@ names_builtin_p (const char *name)
case RID_IS_EMPTY:
case RID_IS_ENUM:
case RID_IS_FINAL:
+ case RID_IS_LAYOUT_COMPATIBLE:
case RID_IS_LITERAL_TYPE:
+ case RID_IS_POINTER_INTERCONVERTIBLE_BASE_OF:
case RID_IS_POD:
case RID_IS_POLYMORPHIC:
case RID_IS_SAME_AS:
@@ -455,13 +470,8 @@ cp_common_init_ts (void)
/* Random new trees. */
MARK_TS_COMMON (BASELINK);
- MARK_TS_COMMON (DECLTYPE_TYPE);
MARK_TS_COMMON (OVERLOAD);
MARK_TS_COMMON (TEMPLATE_PARM_INDEX);
- MARK_TS_COMMON (TYPENAME_TYPE);
- MARK_TS_COMMON (TYPEOF_TYPE);
- MARK_TS_COMMON (UNBOUND_CLASS_TEMPLATE);
- MARK_TS_COMMON (UNDERLYING_TYPE);
/* New decls. */
MARK_TS_DECL_COMMON (TEMPLATE_DECL);
@@ -471,10 +481,16 @@ cp_common_init_ts (void)
MARK_TS_DECL_NON_COMMON (USING_DECL);
/* New Types. */
+ MARK_TS_TYPE_COMMON (UNBOUND_CLASS_TEMPLATE);
+ MARK_TS_TYPE_COMMON (TYPE_ARGUMENT_PACK);
+
+ MARK_TS_TYPE_NON_COMMON (DECLTYPE_TYPE);
+ MARK_TS_TYPE_NON_COMMON (TYPENAME_TYPE);
+ MARK_TS_TYPE_NON_COMMON (TYPEOF_TYPE);
+ MARK_TS_TYPE_NON_COMMON (UNDERLYING_TYPE);
MARK_TS_TYPE_NON_COMMON (BOUND_TEMPLATE_TEMPLATE_PARM);
MARK_TS_TYPE_NON_COMMON (TEMPLATE_TEMPLATE_PARM);
MARK_TS_TYPE_NON_COMMON (TEMPLATE_TYPE_PARM);
- MARK_TS_TYPE_NON_COMMON (TYPE_ARGUMENT_PACK);
MARK_TS_TYPE_NON_COMMON (TYPE_PACK_EXPANSION);
/* Statements. */