cp-tree.h (enum cp_tree_index): Add CPTI_AUTO_IDENTIFIER & CPTI_DECLTYPE_AUTO_IDENTIFIER.
authorNathan Sidwell <nathan@acm.org>
Wed, 7 Dec 2016 12:52:39 +0000 (12:52 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Wed, 7 Dec 2016 12:52:39 +0000 (12:52 +0000)
* cp-tree.h (enum cp_tree_index): Add CPTI_AUTO_IDENTIFIER &
CPTI_DECLTYPE_AUTO_IDENTIFIER.
(auto_identifier, decltype_auto_identifier): New.
*decl.c (initialize_predefined_identifiers): Add 'auto' and
'decltype(auto)'.
(grokdeclarator): Use cached identifier.
* pt.c (make_decltype_auto, make_auto, make_constrained_auto,
is_auto): Likewise.

From-SVN: r243342

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/pt.c

index f16813d1be025a4450de3547a63eef30cc5a6da8..3964cfd5aa952d60499bb71df5b9e50bebd71f96 100644 (file)
@@ -1,3 +1,14 @@
+2016-12-07  Nathan Sidwell  <nathan@acm.org>
+
+       * cp-tree.h (enum cp_tree_index): Add CPTI_AUTO_IDENTIFIER &
+       CPTI_DECLTYPE_AUTO_IDENTIFIER.
+       (auto_identifier, decltype_auto_identifier): New.
+       *decl.c (initialize_predefined_identifiers): Add 'auto' and
+       'decltype(auto)'.
+       (grokdeclarator): Use cached identifier.
+       * pt.c (make_decltype_auto, make_auto, make_constrained_auto,
+       is_auto): Likewise.
+
 2016-12-02  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/78649
index 5674886b26f7b2e67dfa1ce604c60832a15540b1..f7da76a8e818fc08fd1b7ebbb9b5b6614369b47e 100644 (file)
@@ -1117,6 +1117,8 @@ enum cp_tree_index
     CPTI_PFN_IDENTIFIER,
     CPTI_VPTR_IDENTIFIER,
     CPTI_STD_IDENTIFIER,
+    CPTI_AUTO_IDENTIFIER,
+    CPTI_DECLTYPE_AUTO_IDENTIFIER,
 
     CPTI_LANG_NAME_C,
     CPTI_LANG_NAME_CPLUSPLUS,
@@ -1200,6 +1202,9 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
 #define vptr_identifier                        cp_global_trees[CPTI_VPTR_IDENTIFIER]
 /* The name of the std namespace.  */
 #define std_identifier                 cp_global_trees[CPTI_STD_IDENTIFIER]
+/* auto and declspec(auto) identifiers.  */
+#define auto_identifier                        cp_global_trees[CPTI_AUTO_IDENTIFIER]
+#define decltype_auto_identifier       cp_global_trees[CPTI_DECLTYPE_AUTO_IDENTIFIER]
 /* The name of a C++17 deduction guide.  */
 #define lang_name_c                    cp_global_trees[CPTI_LANG_NAME_C]
 #define lang_name_cplusplus            cp_global_trees[CPTI_LANG_NAME_CPLUSPLUS]
index f0850d726ed3da7d3d29637896ceb9e41a84537a..d7dbf94c07699378d0ca3b85391d3da42dfbd130 100644 (file)
@@ -4034,6 +4034,8 @@ initialize_predefined_identifiers (void)
     { "__vtt_parm", &vtt_parm_identifier, 0 },
     { "::", &global_scope_name, 0 },
     { "std", &std_identifier, 0 },
+    { "auto", &auto_identifier, 0 },
+    { "decltype(auto)", &decltype_auto_identifier, 0 },
     { NULL, NULL, 0 }
   };
 
@@ -10600,7 +10602,7 @@ grokdeclarator (const cp_declarator *declarator,
          gcc_unreachable ();
        }
       if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
-         || TYPE_IDENTIFIER (type) != get_identifier ("auto"))
+         || TYPE_IDENTIFIER (type) != auto_identifier)
        {
          if (type != error_mark_node)
            {
index b51e5801109c9d16cd581aae03ae5da75e7dd895..3b80ca402e7d9de75be830da5b5fe5476c7b9e9e 100644 (file)
@@ -24302,13 +24302,13 @@ make_auto_1 (tree name, bool set_canonical)
 tree
 make_decltype_auto (void)
 {
-  return make_auto_1 (get_identifier ("decltype(auto)"), true);
+  return make_auto_1 (decltype_auto_identifier, true);
 }
 
 tree
 make_auto (void)
 {
-  return make_auto_1 (get_identifier ("auto"), true);
+  return make_auto_1 (auto_identifier, true);
 }
 
 /* Return a C++17 deduction placeholder for class template TMPL.  */
@@ -24330,7 +24330,7 @@ make_template_placeholder (tree tmpl)
 tree
 make_constrained_auto (tree con, tree args)
 {
-  tree type = make_auto_1 (get_identifier ("auto"), false);
+  tree type = make_auto_1 (auto_identifier, false);
 
   /* Build the constraint. */
   tree tmpl = DECL_TI_TEMPLATE (con);
@@ -25016,8 +25016,8 @@ bool
 is_auto (const_tree type)
 {
   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
-      && (TYPE_IDENTIFIER (type) == get_identifier ("auto")
-         || TYPE_IDENTIFIER (type) == get_identifier ("decltype(auto)")
+      && (TYPE_IDENTIFIER (type) == auto_identifier
+         || TYPE_IDENTIFIER (type) == decltype_auto_identifier
          || CLASS_PLACEHOLDER_TEMPLATE (type)))
     return true;
   else