OSDN Git Service

* pt.c (register_specialization): Push DECL_SOURCE_LOCATION to the
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
index cb2827d..9f5ca30 100644 (file)
@@ -5586,12 +5586,19 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
 
   if (init && TREE_CODE (decl) == FUNCTION_DECL)
     {
+      tree clone;
       if (init == ridpointers[(int)RID_DELETE])
        {
          /* FIXME check this is 1st decl.  */
          DECL_DELETED_FN (decl) = 1;
          DECL_DECLARED_INLINE_P (decl) = 1;
          DECL_INITIAL (decl) = error_mark_node;
+         FOR_EACH_CLONE (clone, decl)
+           {
+             DECL_DELETED_FN (clone) = 1;
+             DECL_DECLARED_INLINE_P (clone) = 1;
+             DECL_INITIAL (clone) = error_mark_node;
+           }
          init = NULL_TREE;
        }
       else if (init == ridpointers[(int)RID_DEFAULT])
@@ -5602,7 +5609,11 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
              DECL_INITIAL (decl) = NULL_TREE;
            }
          else
-           DECL_DEFAULTED_FN (decl) = 1;
+           {
+             DECL_DEFAULTED_FN (decl) = 1;
+             FOR_EACH_CLONE (clone, decl)
+               DECL_DEFAULTED_FN (clone) = 1;
+           }
        }
     }
     
@@ -9966,6 +9977,10 @@ move_fn_p (const_tree d)
 
 /* Remember any special properties of member function DECL.  */
 
+#define DECL_DEFAULTED_IN_CLASS_P(DECL)                                        \
+ (DECL_DEFAULTED_FN (DECL)                                             \
+  && (DECL_ARTIFICIAL (DECL) || DECL_INITIALIZED_IN_CLASS_P (DECL)))
+
 void
 grok_special_member_properties (tree decl)
 {
@@ -9992,7 +10007,7 @@ grok_special_member_properties (tree decl)
             are no other parameters or else all other parameters have
             default arguments.  */
          TYPE_HAS_INIT_REF (class_type) = 1;
-         if (!DECL_DEFAULTED_FN (decl))
+         if (!DECL_DEFAULTED_IN_CLASS_P (decl))
            TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
          if (ctor > 1)
            TYPE_HAS_CONST_INIT_REF (class_type) = 1;
@@ -10000,7 +10015,8 @@ grok_special_member_properties (tree decl)
       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
        {
          TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
-         if (TREE_CODE (decl) == TEMPLATE_DECL || !DECL_DEFAULTED_FN (decl))
+         if (TREE_CODE (decl) == TEMPLATE_DECL
+             || !DECL_DEFAULTED_IN_CLASS_P (decl))
            TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
        }
       else if (is_list_ctor (decl))
@@ -10019,7 +10035,7 @@ grok_special_member_properties (tree decl)
       if (assop)
        {
          TYPE_HAS_ASSIGN_REF (class_type) = 1;
-         if (!DECL_DEFAULTED_FN (decl))
+         if (!DECL_DEFAULTED_IN_CLASS_P (decl))
            TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
          if (assop != 1)
            TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;