From: Jason Merrill Date: Tue, 30 Sep 2014 17:12:49 +0000 (-0400) Subject: c-common.h (enum rid): Add RID_IS_TRIVIALLY_COPYABLE. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b752325e946487109cd3301f81b0301d0bad346d;p=gcc.git c-common.h (enum rid): Add RID_IS_TRIVIALLY_COPYABLE. c-family/ * c-common.h (enum rid): Add RID_IS_TRIVIALLY_COPYABLE. * c-common.c (c_common_reswords): Add __is_trivially_copyable. cp/ * cp-tree.h (cp_trait_kind): Add CPTK_IS_TRIVIALLY_COPYABLE. * cxx-pretty-print.c (pp_cxx_trait_expression): Likewise. * parser.c (cp_parser_primary_expression): Likewise. (cp_parser_trait_expr): Likewise. * semantics.c (trait_expr_value): Likewise. (finish_trait_expr): Likewise. From-SVN: r215737 --- diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 262b2d4de2f..8c44b18a859 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,5 +1,8 @@ 2014-09-30 Jason Merrill + * c-common.h (enum rid): Add RID_IS_TRIVIALLY_COPYABLE. + * c-common.c (c_common_reswords): Add __is_trivially_copyable. + * c-common.h (enum rid): Remove RID_IS_CONVERTIBLE_TO. * c-common.c (c_common_reswords): Remove __is_convertible_to. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 0324a0aaa30..482dd449611 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -480,6 +480,7 @@ const struct c_common_resword c_common_reswords[] = { "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY }, { "__is_standard_layout", RID_IS_STD_LAYOUT, D_CXXONLY }, { "__is_trivial", RID_IS_TRIVIAL, D_CXXONLY }, + { "__is_trivially_copyable", RID_IS_TRIVIALLY_COPYABLE, D_CXXONLY }, { "__is_union", RID_IS_UNION, D_CXXONLY }, { "__label__", RID_LABEL, 0 }, { "__null", RID_NULL, 0 }, diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 5ba7859cb9d..b7e3385ab7a 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -143,6 +143,7 @@ enum rid RID_IS_FINAL, RID_IS_LITERAL_TYPE, RID_IS_POD, RID_IS_POLYMORPHIC, RID_IS_STD_LAYOUT, RID_IS_TRIVIAL, + RID_IS_TRIVIALLY_COPYABLE, RID_IS_UNION, RID_UNDERLYING_TYPE, /* C++11 */ diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2cc37928c39..d44d67a3875 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,12 @@ 2014-09-30 Jason Merrill + * cp-tree.h (cp_trait_kind): Add CPTK_IS_TRIVIALLY_COPYABLE. + * cxx-pretty-print.c (pp_cxx_trait_expression): Likewise. + * parser.c (cp_parser_primary_expression): Likewise. + (cp_parser_trait_expr): Likewise. + * semantics.c (trait_expr_value): Likewise. + (finish_trait_expr): Likewise. + * method.c (build_stub_object): Use CONVERT_EXPR. * tree.c (build_dummy_object): Likewise. (is_dummy_object): Adjust. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 789ef1afb44..8e5c3b7909f 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -653,6 +653,7 @@ typedef enum cp_trait_kind CPTK_IS_POLYMORPHIC, CPTK_IS_STD_LAYOUT, CPTK_IS_TRIVIAL, + CPTK_IS_TRIVIALLY_COPYABLE, CPTK_IS_UNION, CPTK_UNDERLYING_TYPE } cp_trait_kind; diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c index f0734ec2f4f..7b2d7fd205b 100644 --- a/gcc/cp/cxx-pretty-print.c +++ b/gcc/cp/cxx-pretty-print.c @@ -2393,6 +2393,9 @@ pp_cxx_trait_expression (cxx_pretty_printer *pp, tree t) case CPTK_IS_TRIVIAL: pp_cxx_ws_string (pp, "__is_trivial"); break; + case CPTK_IS_TRIVIALLY_COPYABLE: + pp_cxx_ws_string (pp, "__is_trivially_copyable"); + break; case CPTK_IS_UNION: pp_cxx_ws_string (pp, "__is_union"); break; diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 63cc0d3dd71..b1feef52b93 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -4490,6 +4490,7 @@ cp_parser_primary_expression (cp_parser *parser, case RID_IS_POLYMORPHIC: case RID_IS_STD_LAYOUT: case RID_IS_TRIVIAL: + case RID_IS_TRIVIALLY_COPYABLE: case RID_IS_UNION: return cp_parser_trait_expr (parser, token->keyword); @@ -8724,6 +8725,9 @@ cp_parser_trait_expr (cp_parser* parser, enum rid keyword) case RID_IS_TRIVIAL: kind = CPTK_IS_TRIVIAL; break; + case RID_IS_TRIVIALLY_COPYABLE: + kind = CPTK_IS_TRIVIALLY_COPYABLE; + break; case RID_IS_UNION: kind = CPTK_IS_UNION; break; diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 3fbbb17dc3d..9bcc6d73c78 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7379,6 +7379,9 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2) case CPTK_IS_TRIVIAL: return (trivial_type_p (type1)); + case CPTK_IS_TRIVIALLY_COPYABLE: + return (trivially_copyable_p (type1)); + case CPTK_IS_UNION: return (type_code1 == UNION_TYPE); @@ -7442,6 +7445,7 @@ finish_trait_expr (cp_trait_kind kind, tree type1, tree type2) case CPTK_IS_POLYMORPHIC: case CPTK_IS_STD_LAYOUT: case CPTK_IS_TRIVIAL: + case CPTK_IS_TRIVIALLY_COPYABLE: if (!check_trait_type (type1)) return error_mark_node; break;