Hi,
just consistently handle the various "type traits" RIDs in alphabetical
order (+ update the comments to mention the most recent ones). Tested
x86_64-linux.
Ok for mainline?
Paolo.
////////////////////
/c-family
2011-05-15 Paolo Carlini <paolo.carl...@oracle.com>
* c-common.c (c_common_reswords): Reorder.
* c-common.h (rid): Likewise.
/cp
2011-05-15 Paolo Carlini <paolo.carl...@oracle.com>
* cxx-pretty-print.c: Update comment.
* semantics.c (trait_expr_value, finish_trait_expr):
Reorder the cases.
* parser.c (cp_parser_primary_expression): Likewise.
Index: c-family/c-common.c
===================================================================
--- c-family/c-common.c (revision 173769)
+++ c-family/c-common.c (working copy)
@@ -437,6 +437,10 @@ const struct c_common_resword c_common_reswords[]
{ "__has_trivial_copy", RID_HAS_TRIVIAL_COPY, D_CXXONLY },
{ "__has_trivial_destructor", RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY },
{ "__has_virtual_destructor", RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY },
+ { "__imag", RID_IMAGPART, 0 },
+ { "__imag__", RID_IMAGPART, 0 },
+ { "__inline", RID_INLINE, 0 },
+ { "__inline__", RID_INLINE, 0 },
{ "__int128", RID_INT128, 0 },
{ "__is_abstract", RID_IS_ABSTRACT, D_CXXONLY },
{ "__is_base_of", RID_IS_BASE_OF, D_CXXONLY },
@@ -444,17 +448,12 @@ const struct c_common_resword c_common_reswords[]
{ "__is_convertible_to", RID_IS_CONVERTIBLE_TO, D_CXXONLY },
{ "__is_empty", RID_IS_EMPTY, D_CXXONLY },
{ "__is_enum", RID_IS_ENUM, D_CXXONLY },
+ { "__is_literal_type", RID_IS_LITERAL_TYPE, D_CXXONLY },
{ "__is_pod", RID_IS_POD, D_CXXONLY },
{ "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY },
{ "__is_standard_layout", RID_IS_STD_LAYOUT, D_CXXONLY },
{ "__is_trivial", RID_IS_TRIVIAL, D_CXXONLY },
{ "__is_union", RID_IS_UNION, D_CXXONLY },
- { "__is_literal_type", RID_IS_LITERAL_TYPE, D_CXXONLY },
- { "__underlying_type", RID_UNDERLYING_TYPE, D_CXXONLY },
- { "__imag", RID_IMAGPART, 0 },
- { "__imag__", RID_IMAGPART, 0 },
- { "__inline", RID_INLINE, 0 },
- { "__inline__", RID_INLINE, 0 },
{ "__label__", RID_LABEL, 0 },
{ "__null", RID_NULL, 0 },
{ "__real", RID_REALPART, 0 },
@@ -466,6 +465,7 @@ const struct c_common_resword c_common_reswords[]
{ "__thread", RID_THREAD, 0 },
{ "__typeof", RID_TYPEOF, 0 },
{ "__typeof__", RID_TYPEOF, 0 },
+ { "__underlying_type", RID_UNDERLYING_TYPE, D_CXXONLY },
{ "__volatile", RID_VOLATILE, 0 },
{ "__volatile__", RID_VOLATILE, 0 },
{ "alignof", RID_ALIGNOF, D_CXXONLY | D_CXX0X | D_CXXWARN },
Index: c-family/c-common.h
===================================================================
--- c-family/c-common.h (revision 173769)
+++ c-family/c-common.h (working copy)
@@ -135,9 +135,9 @@ enum rid
RID_IS_ABSTRACT, RID_IS_BASE_OF,
RID_IS_CONVERTIBLE_TO, RID_IS_CLASS,
RID_IS_EMPTY, RID_IS_ENUM,
- RID_IS_POD, RID_IS_POLYMORPHIC,
- RID_IS_STD_LAYOUT, RID_IS_TRIVIAL,
- RID_IS_UNION, RID_IS_LITERAL_TYPE,
+ RID_IS_LITERAL_TYPE, RID_IS_POD,
+ RID_IS_POLYMORPHIC, RID_IS_STD_LAYOUT,
+ RID_IS_TRIVIAL, RID_IS_UNION,
RID_UNDERLYING_TYPE,
/* C++0x */
Index: cp/cxx-pretty-print.c
===================================================================
--- cp/cxx-pretty-print.c (revision 173769)
+++ cp/cxx-pretty-print.c (working copy)
@@ -394,8 +394,11 @@ pp_cxx_id_expression (cxx_pretty_printer *pp, tree
__is_convertible_to ( type-id , type-id )
__is_empty ( type-id )
__is_enum ( type-id )
+ __is_literal_type ( type-id )
__is_pod ( type-id )
__is_polymorphic ( type-id )
+ __is_std_layout ( type-id )
+ __is_trivial ( type-id )
__is_union ( type-id ) */
static void
Index: cp/semantics.c
===================================================================
--- cp/semantics.c (revision 173769)
+++ cp/semantics.c (working copy)
@@ -5165,6 +5165,9 @@ trait_expr_value (cp_trait_kind kind, tree type1,
case CPTK_IS_ENUM:
return (type_code1 == ENUMERAL_TYPE);
+ case CPTK_IS_LITERAL_TYPE:
+ return (literal_type_p (type1));
+
case CPTK_IS_POD:
return (pod_type_p (type1));
@@ -5180,9 +5183,6 @@ trait_expr_value (cp_trait_kind kind, tree type1,
case CPTK_IS_UNION:
return (type_code1 == UNION_TYPE);
- case CPTK_IS_LITERAL_TYPE:
- return (literal_type_p (type1));
-
default:
gcc_unreachable ();
return false;
@@ -5227,11 +5227,11 @@ finish_trait_expr (cp_trait_kind kind, tree type1,
|| kind == CPTK_IS_CONVERTIBLE_TO
|| kind == CPTK_IS_EMPTY
|| kind == CPTK_IS_ENUM
+ || kind == CPTK_IS_LITERAL_TYPE
|| kind == CPTK_IS_POD
|| kind == CPTK_IS_POLYMORPHIC
|| kind == CPTK_IS_STD_LAYOUT
|| kind == CPTK_IS_TRIVIAL
- || kind == CPTK_IS_LITERAL_TYPE
|| kind == CPTK_IS_UNION);
if (kind == CPTK_IS_CONVERTIBLE_TO)
@@ -5271,11 +5271,11 @@ finish_trait_expr (cp_trait_kind kind, tree type1,
case CPTK_HAS_VIRTUAL_DESTRUCTOR:
case CPTK_IS_ABSTRACT:
case CPTK_IS_EMPTY:
+ case CPTK_IS_LITERAL_TYPE:
case CPTK_IS_POD:
case CPTK_IS_POLYMORPHIC:
case CPTK_IS_STD_LAYOUT:
case CPTK_IS_TRIVIAL:
- case CPTK_IS_LITERAL_TYPE:
if (!check_trait_type (type1))
{
error ("incomplete type %qT not allowed", type1);
Index: cp/parser.c
===================================================================
--- cp/parser.c (revision 173769)
+++ cp/parser.c (working copy)
@@ -3274,8 +3274,11 @@ cp_parser_translation_unit (cp_parser* parser)
__is_convertible_to ( type-id , type-id )
__is_empty ( type-id )
__is_enum ( type-id )
+ __is_literal_type ( type-id )
__is_pod ( type-id )
__is_polymorphic ( type-id )
+ __is_std_layout ( type-id )
+ __is_trivial ( type-id )
__is_union ( type-id )
Objective-C++ Extension:
@@ -3601,12 +3604,12 @@ cp_parser_primary_expression (cp_parser *parser,
case RID_IS_CONVERTIBLE_TO:
case RID_IS_EMPTY:
case RID_IS_ENUM:
+ case RID_IS_LITERAL_TYPE:
case RID_IS_POD:
case RID_IS_POLYMORPHIC:
case RID_IS_STD_LAYOUT:
case RID_IS_TRIVIAL:
case RID_IS_UNION:
- case RID_IS_LITERAL_TYPE:
return cp_parser_trait_expr (parser, token->keyword);
/* Objective-C++ expressions. */