cp-tree.h (DECL_CONSTRUCTOR_P, [...]): Look at identifier flags.
authorNathan Sidwell <nathan@acm.org>
Wed, 12 Jul 2017 17:29:11 +0000 (17:29 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Wed, 12 Jul 2017 17:29:11 +0000 (17:29 +0000)
* cp-tree.h (DECL_CONSTRUCTOR_P, DECL_MAYBE_IN_CHARGE_CONSTRUCTOR,
DECL_DESTRUCTOR_P, DECL_MAYBE_IN_CHARGE_DESTRCTOR): Look at
identifier flags.
* decl.c (grokfndecl): Set DECL_CXX_CONSTRUCTOR and
DECL_CXX_DESTRUCTOR explicitly.
* decl2.c (grokclassfn): Likewise.
* friend.c (do_friend): Likewise.
* method.c (make_thunk, make_alias_for,
implicitly_declare_fn): Likewise.

From-SVN: r250158

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/friend.c
gcc/cp/method.c

index bf77412d8bed997369649d2c919b5c58b496d7a0..178b26260988c4358db4d387216bce5b91a8ece8 100644 (file)
@@ -1,3 +1,15 @@
+2017-07-12  Nathan Sidwell  <nathan@acm.org>
+
+       * cp-tree.h (DECL_CONSTRUCTOR_P, DECL_MAYBE_IN_CHARGE_CONSTRUCTOR,
+       DECL_DESTRUCTOR_P, DECL_MAYBE_IN_CHARGE_DESTRCTOR): Look at
+       identifier flags.
+       * decl.c (grokfndecl): Set DECL_CXX_CONSTRUCTOR and
+       DECL_CXX_DESTRUCTOR explicitly.
+       * decl2.c (grokclassfn): Likewise.
+       * friend.c (do_friend): Likewise.
+       * method.c (make_thunk, make_alias_for,
+       implicitly_declare_fn): Likewise.
+
 2017-07-11  Jason Merrill  <jason@redhat.com>
 
        Core DR 393
index b58cfcecc6e417f801723b7e3a504ece1ba0abd4..665ec034d0cba22c1b40feeb42900b0ff90524d5 100644 (file)
@@ -2706,7 +2706,7 @@ struct GTY(()) lang_decl {
 /* For FUNCTION_DECLs and TEMPLATE_DECLs: nonzero means that this function
    is a constructor.  */
 #define DECL_CONSTRUCTOR_P(NODE) \
-  DECL_CXX_CONSTRUCTOR_P (STRIP_TEMPLATE (NODE))
+  IDENTIFIER_CTOR_P (DECL_NAME (NODE))
 
 /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a complete
    object.  */
@@ -2722,8 +2722,7 @@ struct GTY(()) lang_decl {
    specialized in-charge constructor or the specialized not-in-charge
    constructor.  */
 #define DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P(NODE)               \
-  (DECL_DECLARES_FUNCTION_P (NODE) && DECL_CONSTRUCTOR_P (NODE) \
-   && !DECL_CLONED_FUNCTION_P (NODE))
+  (DECL_NAME (NODE) == ctor_identifier)
 
 /* Nonzero if NODE (a FUNCTION_DECL) is a copy constructor.  */
 #define DECL_COPY_CONSTRUCTOR_P(NODE) \
@@ -2736,14 +2735,13 @@ struct GTY(()) lang_decl {
 /* Nonzero if NODE (a FUNCTION_DECL or TEMPLATE_DECL)
    is a destructor.  */
 #define DECL_DESTRUCTOR_P(NODE)                                \
-  DECL_CXX_DESTRUCTOR_P (STRIP_TEMPLATE (NODE))
+  IDENTIFIER_DTOR_P (DECL_NAME (NODE))
 
 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor, but not the
    specialized in-charge constructor, in-charge deleting constructor,
    or the base destructor.  */
 #define DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P(NODE)                        \
-  (DECL_DECLARES_FUNCTION_P (NODE) && DECL_DESTRUCTOR_P (NODE) \
-   && !DECL_CLONED_FUNCTION_P (NODE))
+  (DECL_NAME (NODE) == dtor_identifier)
 
 /* Nonzero if NODE (a FUNCTION_DECL) is a destructor for a complete
    object.  */
index b9b8794d29b1330d02837c6790b924d396e47f7a..5b8e6a22b01ce00cac5e3a79829b3aa66d457e02 100644 (file)
@@ -8513,11 +8513,11 @@ grokfndecl (tree ctype,
     case sfk_constructor:
     case sfk_copy_constructor:
     case sfk_move_constructor:
-      DECL_CONSTRUCTOR_P (decl) = 1;
+      DECL_CXX_CONSTRUCTOR_P (decl) = 1;
       DECL_NAME (decl) = ctor_identifier;
       break;
     case sfk_destructor:
-      DECL_DESTRUCTOR_P (decl) = 1;
+      DECL_CXX_DESTRUCTOR_P (decl) = 1;
       DECL_NAME (decl) = dtor_identifier;
       break;
     default:
index 62a50acc93d86eced013d2e950139accb4b13677..4fa4ad9740f89206840dd5af58bb133677d3293e 100644 (file)
@@ -342,7 +342,7 @@ grokclassfn (tree ctype, tree function, enum overload_flags flags)
   DECL_CONTEXT (function) = ctype;
 
   if (flags == DTOR_FLAG)
-    DECL_DESTRUCTOR_P (function) = 1;
+    DECL_CXX_DESTRUCTOR_P (function) = 1;
 
   if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
     maybe_retrofit_in_chrg (function);
index a3c2ed094721c443ca03097725e04ff54c6f54e6..ef93bfe39ec452c1cc6530a632d3c5514c04ef06 100644 (file)
@@ -529,7 +529,7 @@ do_friend (tree ctype, tree declarator, tree decl,
 
       /* A method friend.  */
       if (flags == NO_SPECIAL && declarator == cname)
-       DECL_CONSTRUCTOR_P (decl) = 1;
+       DECL_CXX_CONSTRUCTOR_P (decl) = 1;
 
       grokclassfn (ctype, decl, flags);
 
index 0646b08e577d8d571c860db0b0b2fe6399b2b690..0a4a9540622ba1ef87141f450934f43098b4f804 100644 (file)
@@ -137,8 +137,8 @@ make_thunk (tree function, bool this_adjusting,
   DECL_SAVED_FUNCTION_DATA (thunk) = NULL;
   /* The thunk itself is not a constructor or destructor, even if
      the thing it is thunking to is.  */
-  DECL_DESTRUCTOR_P (thunk) = 0;
-  DECL_CONSTRUCTOR_P (thunk) = 0;
+  DECL_CXX_DESTRUCTOR_P (thunk) = 0;
+  DECL_CXX_CONSTRUCTOR_P (thunk) = 0;
   DECL_EXTERNAL (thunk) = 1;
   DECL_ARTIFICIAL (thunk) = 1;
   /* The THUNK is not a pending inline, even if the FUNCTION is.  */
@@ -223,8 +223,8 @@ make_alias_for (tree target, tree newid)
   if (TREE_CODE (alias) == FUNCTION_DECL)
     {
       DECL_SAVED_FUNCTION_DATA (alias) = NULL;
-      DECL_DESTRUCTOR_P (alias) = 0;
-      DECL_CONSTRUCTOR_P (alias) = 0;
+      DECL_CXX_DESTRUCTOR_P (alias) = 0;
+      DECL_CXX_CONSTRUCTOR_P (alias) = 0;
       DECL_PENDING_INLINE_P (alias) = 0;
       DECL_DECLARED_INLINE_P (alias) = 0;
       DECL_INITIAL (alias) = error_mark_node;
@@ -2058,9 +2058,9 @@ implicitly_declare_fn (special_function_kind kind, tree type,
     /* Assignment operator.  */
     SET_OVERLOADED_OPERATOR_CODE (fn, NOP_EXPR);
   else if (IDENTIFIER_CTOR_P (name))
-    DECL_CONSTRUCTOR_P (fn) = true;
+    DECL_CXX_CONSTRUCTOR_P (fn) = true;
   else
-    DECL_DESTRUCTOR_P (fn) = true;
+    DECL_CXX_DESTRUCTOR_P (fn) = true;
 
   SET_DECL_ALIGN (fn, MINIMUM_METHOD_BOUNDARY);