pt.c (tsubst_copy_and_build): Remove unnecessary COMPONENT_REF peeking.
authorNathan Sidwell <nathan@acm.org>
Tue, 16 May 2017 13:12:01 +0000 (13:12 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 16 May 2017 13:12:01 +0000 (13:12 +0000)
* pt.c (tsubst_copy_and_build): Remove unnecessary COMPONENT_REF
peeking.
* semantics.c (finish_id_expression): Directly init local var.
(finish_omp_reduction_clause): Use really_overloaded_fn.
* tree.c (get_fns): Document.  Assert we got an overload.
(get_first_fn) Document.
* typeck.c (cp_build_addr_expr_1): Pass arg directly to
really_overloaded_fn.
* typeck2.c (cxx_inomplete_type_diagnostic): Use get_first_fn directly.

From-SVN: r248106

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/cp/semantics.c
gcc/cp/tree.c
gcc/cp/typeck.c
gcc/cp/typeck2.c

index 120d2b060628772f8e2194677538651592ad6550..ee25eface709272922f4b3a07277d3102b6749c1 100644 (file)
@@ -1,5 +1,15 @@
 2017-05-16  Nathan Sidwell  <nathan@acm.org>
 
+       * pt.c (tsubst_copy_and_build): Remove unnecessary COMPONENT_REF
+       peeking.
+       * semantics.c (finish_id_expression): Directly init local var.
+       (finish_omp_reduction_clause): Use really_overloaded_fn.
+       * tree.c (get_fns): Document.  Assert we got an overload.
+       (get_first_fn) Document.
+       * typeck.c (cp_build_addr_expr_1): Pass arg directly to
+       really_overloaded_fn.
+       * typeck2.c (cxx_inomplete_type_diagnostic): Use get_first_fn directly.
+
        * cp-tree.h (SCOPE_DEPTH): New.
        * name-lookup.h (is_nested_namespace): Declare.
        * name-lookup.c (is_nested_namespace): New.
index cc38e819f32403f2ddb4172908d65eb313adea2c..8f120aa144603b8139f71bbfb5fc7a7573465e63 100644 (file)
@@ -17187,10 +17187,9 @@ tsubst_copy_and_build (tree t,
                    if (diag)
                      {
                        tree fn = unq;
+
                        if (INDIRECT_REF_P (fn))
                          fn = TREE_OPERAND (fn, 0);
-                       if (TREE_CODE (fn) == COMPONENT_REF)
-                         fn = TREE_OPERAND (fn, 1);
                        if (is_overloaded_fn (fn))
                          fn = get_first_fn (fn);
 
index 7b2c101302faa4849da5ecb9ffa5536dcf4d8637..6c46823cec0ce6a3892a632b2d9fe13bdde7f612 100644 (file)
@@ -3749,9 +3749,8 @@ finish_id_expression (tree id_expression,
        }
       else if (is_overloaded_fn (decl))
        {
-         tree first_fn;
+         tree first_fn = get_first_fn (decl);
 
-         first_fn = get_first_fn (decl);
          if (TREE_CODE (first_fn) == TEMPLATE_DECL)
            first_fn = DECL_TEMPLATE_RESULT (first_fn);
 
@@ -5615,7 +5614,6 @@ finish_omp_reduction_clause (tree c, bool *need_default_ctor, bool *need_dtor)
     {
       if (id == error_mark_node)
        return true;
-      id = OVL_CURRENT (id);
       mark_used (id);
       tree body = DECL_SAVED_TREE (id);
       if (!body)
@@ -6924,13 +6922,13 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
            {
              if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_TO_DECLARE)
                {
-                 if (TREE_CODE (t) == OVERLOAD && OVL_CHAIN (t))
+                 if (TREE_CODE (t) == TEMPLATE_ID_EXPR)
                    error_at (OMP_CLAUSE_LOCATION (c),
-                             "overloaded function name %qE in clause %qs", t,
+                             "template %qE in clause %qs", t,
                              omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
-                 else if (TREE_CODE (t) == TEMPLATE_ID_EXPR)
+                 else if (really_overloaded_fn (t))
                    error_at (OMP_CLAUSE_LOCATION (c),
-                             "template %qE in clause %qs", t,
+                             "overloaded function name %qE in clause %qs", t,
                              omp_clause_code_name[OMP_CLAUSE_CODE (c)]);
                  else
                    error_at (OMP_CLAUSE_LOCATION (c),
index 858d0d42537e7b47b5489aacc4013f5533a4f485..2382f14b57133c669ec7af350691e8eb17b219e7 100644 (file)
@@ -2146,10 +2146,11 @@ really_overloaded_fn (tree x)
   return is_overloaded_fn (x) == 2;
 }
 
+/* Get the overload set FROM refers to.  */
+
 tree
 get_fns (tree from)
 {
-  gcc_assert (is_overloaded_fn (from));
   /* A baselink is also considered an overloaded function.  */
   if (TREE_CODE (from) == OFFSET_REF
       || TREE_CODE (from) == COMPONENT_REF)
@@ -2158,9 +2159,13 @@ get_fns (tree from)
     from = BASELINK_FUNCTIONS (from);
   if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
     from = TREE_OPERAND (from, 0);
+  gcc_assert (TREE_CODE (from) == OVERLOAD
+             || TREE_CODE (from) == FUNCTION_DECL);
   return from;
 }
 
+/* Return the first function of the overload set FROM refers to.  */
+
 tree
 get_first_fn (tree from)
 {
index 26ef5ed574857ceaf78a2aeb8e2b2f1fbc095d08..6bc88a9d780ea11963d5ae510309e7b36241439d 100644 (file)
@@ -5603,7 +5603,7 @@ cp_build_addr_expr_1 (tree arg, bool strict_lvalue, tsubst_flags_t complain)
   gcc_assert (!identifier_p (arg) || !IDENTIFIER_OPNAME_P (arg));
 
   if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
-      && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
+      && !really_overloaded_fn (arg))
     {
       /* They're trying to take the address of a unique non-static
         member function.  This is ill-formed (except in MS-land),
index 216736dd00055b79555f852cfdaf3ba55cdf9c70..b469fdb7b2828d9f3b0c812549c8c42d497e5c08 100644 (file)
@@ -506,9 +506,8 @@ cxx_incomplete_type_diagnostic (location_t loc, const_tree value,
     case OFFSET_TYPE:
     bad_member:
       {
-       tree member = TREE_OPERAND (value, 1);
-       if (is_overloaded_fn (member))
-         member = get_first_fn (member);
+       tree member = get_first_fn (TREE_OPERAND (value, 1));
+
        if (DECL_FUNCTION_MEMBER_P (member)
            && ! flag_ms_extensions)
          emit_diagnostic (diag_kind, loc, 0,