]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Core DR 1442 PR c++/59165
authorPaolo Carlini <paolo.carlini@oracle.com>
Fri, 3 Jan 2014 11:11:31 +0000 (11:11 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 3 Jan 2014 11:11:31 +0000 (11:11 +0000)
/cp
2014-01-03  Paolo Carlini  <paolo.carlini@oracle.com>

Core DR 1442
PR c++/59165
* parser.c (cp_parser_perform_range_for_lookup): Don't pass true
as include_std to perform_koenig_lookup.
(cp_parser_postfix_expression): Adjust.
* pt.c (tsubst_copy_and_build): Likewise.
* semantics.c (perform_koenig_lookup): Remove bool parameter.
(omp_reduction_lookup): Adjust.
* name-lookup.c (lookup_arg_dependent_1): Remove bool parameter.
(lookup_arg_dependent): Likewise.
(lookup_function_nonclass): Adjust.
* name-lookup.h: Adjust declaration.
* cp-tree.h: Likewise.

/testsuite
2014-01-03  Paolo Carlini  <paolo.carlini@oracle.com>

Core DR 1442
PR c++/59165
* g++.dg/cpp0x/range-for28.C: New.
* g++.dg/cpp0x/range-for3.C: Update.

From-SVN: r206313

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/name-lookup.c
gcc/cp/name-lookup.h
gcc/cp/parser.c
gcc/cp/pt.c
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/range-for28.C [new file with mode: 0644]
gcc/testsuite/g++.dg/cpp0x/range-for3.C

index 006c85ba8ef7f153f4c9256339d286f87697e878..e89bc50baa8139d40dffd26ec744025118a53537 100644 (file)
@@ -1,3 +1,19 @@
+2014-01-03  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       Core DR 1442
+       PR c++/59165
+       * parser.c (cp_parser_perform_range_for_lookup): Don't pass true
+       as include_std to perform_koenig_lookup.
+       (cp_parser_postfix_expression): Adjust.
+       * pt.c (tsubst_copy_and_build): Likewise.
+       * semantics.c (perform_koenig_lookup): Remove bool parameter.
+       (omp_reduction_lookup): Adjust.
+       * name-lookup.c (lookup_arg_dependent_1): Remove bool parameter.
+       (lookup_arg_dependent): Likewise.
+       (lookup_function_nonclass): Adjust.
+       * name-lookup.h: Adjust declaration.
+       * cp-tree.h: Likewise.
+
 2014-01-02  Marc Glisse  <marc.glisse@inria.fr>
 
        PR c++/59087
index c2bd04ecf1cf0d04d33839494783624cc45aec56..bdae500d374a5a4d779e0a92a6b1cf1c0d812baa 100644 (file)
@@ -5744,7 +5744,7 @@ extern tree finish_stmt_expr_expr         (tree, tree);
 extern tree finish_stmt_expr                   (tree, bool);
 extern tree stmt_expr_value_expr               (tree);
 bool empty_expr_stmt_p                         (tree);
-extern tree perform_koenig_lookup              (tree, vec<tree, va_gc> *, bool,
+extern tree perform_koenig_lookup              (tree, vec<tree, va_gc> *,
                                                 tsubst_flags_t);
 extern tree finish_call_expr                   (tree, vec<tree, va_gc> **, bool,
                                                 bool, tsubst_flags_t);
index 96850116d98ea3c18471b3447164c2284a58f1e6..28f998d7fd7eed7e38b8e82daf3fe8d8e3c79a65 100644 (file)
@@ -4879,7 +4879,7 @@ lookup_function_nonclass (tree name, vec<tree, va_gc> *args, bool block_p)
   return
     lookup_arg_dependent (name,
                          lookup_name_real (name, 0, 1, block_p, 0, 0),
-                         args, false);
+                         args);
 }
 
 tree
@@ -5578,8 +5578,7 @@ arg_assoc (struct arg_lookup *k, tree n)
    are the functions found in normal lookup.  */
 
 static tree
-lookup_arg_dependent_1 (tree name, tree fns, vec<tree, va_gc> *args,
-                       bool include_std)
+lookup_arg_dependent_1 (tree name, tree fns, vec<tree, va_gc> *args)
 {
   struct arg_lookup k;
 
@@ -5617,8 +5616,6 @@ lookup_arg_dependent_1 (tree name, tree fns, vec<tree, va_gc> *args,
   else
     k.fn_set = NULL;
 
-  if (include_std)
-    arg_assoc_namespace (&k, std_node);
   arg_assoc_args_vec (&k, args);
 
   fns = k.functions;
@@ -5643,13 +5640,12 @@ lookup_arg_dependent_1 (tree name, tree fns, vec<tree, va_gc> *args,
 /* Wrapper for lookup_arg_dependent_1.  */
 
 tree
-lookup_arg_dependent (tree name, tree fns, vec<tree, va_gc> *args,
-                      bool include_std)
+lookup_arg_dependent (tree name, tree fns, vec<tree, va_gc> *args)
 {
   tree ret;
   bool subtime;
   subtime = timevar_cond_start (TV_NAME_LOOKUP);
-  ret = lookup_arg_dependent_1 (name, fns, args, include_std);
+  ret = lookup_arg_dependent_1 (name, fns, args);
   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
   return ret;
 }
index 29b728569f24fe7ba2014a105cfaf24c643cadf8..a63442f85c2064c1fc4f034efc8a6b32ee4a7b65 100644 (file)
@@ -338,7 +338,7 @@ extern void do_toplevel_using_decl (tree, tree, tree);
 extern void do_local_using_decl (tree, tree, tree);
 extern tree do_class_using_decl (tree, tree);
 extern void do_using_directive (tree);
-extern tree lookup_arg_dependent (tree, tree, vec<tree, va_gc> *, bool);
+extern tree lookup_arg_dependent (tree, tree, vec<tree, va_gc> *);
 extern bool is_associated_namespace (tree, tree);
 extern void parse_using_directive (tree, tree);
 extern tree innermost_non_namespace_value (tree);
index 35dcefd265644040426b7b9de00a34c13dc92b5a..c99c1fcb64547e98dbb51df0571169e6b7e1f8a8 100644 (file)
@@ -6076,7 +6076,6 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
                        if (!any_type_dependent_arguments_p (args))
                          postfix_expression
                            = perform_koenig_lookup (postfix_expression, args,
-                                                    /*include_std=*/false,
                                                     complain);
                      }
                    else
@@ -6102,7 +6101,6 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
                        if (!any_type_dependent_arguments_p (args))
                          postfix_expression
                            = perform_koenig_lookup (postfix_expression, args,
-                                                    /*include_std=*/false,
                                                     complain);
                      }
                  }
@@ -10356,12 +10354,10 @@ cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
          vec_safe_push (vec, range);
 
          member_begin = perform_koenig_lookup (id_begin, vec,
-                                               /*include_std=*/true,
                                                tf_warning_or_error);
          *begin = finish_call_expr (member_begin, &vec, false, true,
                                     tf_warning_or_error);
          member_end = perform_koenig_lookup (id_end, vec,
-                                             /*include_std=*/true,
                                              tf_warning_or_error);
          *end = finish_call_expr (member_end, &vec, false, true,
                                   tf_warning_or_error);
index add4cc61d5d5d15986f0d8dc99670da03cdb93d4..3b8f83a596c0b7a91bfda141d031b2e91e180e57 100644 (file)
@@ -14490,8 +14490,7 @@ tsubst_copy_and_build (tree t,
               into a non-dependent call.  */
            && type_dependent_expression_p_push (t)
            && !any_type_dependent_arguments_p (call_args))
-         function = perform_koenig_lookup (function, call_args, false,
-                                           tf_none);
+         function = perform_koenig_lookup (function, call_args, tf_none);
 
        if (identifier_p (function)
            && !any_type_dependent_arguments_p (call_args))
index 91bdb83bbbc09ea3a338fcd618d93124cb1ae655..0bb64c7752b5713d0a176c17777c422d18bef317 100644 (file)
@@ -2041,12 +2041,10 @@ empty_expr_stmt_p (tree expr_stmt)
 
 /* Perform Koenig lookup.  FN is the postfix-expression representing
    the function (or functions) to call; ARGS are the arguments to the
-   call; if INCLUDE_STD then the `std' namespace is automatically
-   considered an associated namespace (used in range-based for loops).
-   Returns the functions to be considered by overload resolution.  */
+   call.  Returns the functions to be considered by overload resolution.  */
 
 tree
-perform_koenig_lookup (tree fn, vec<tree, va_gc> *args, bool include_std,
+perform_koenig_lookup (tree fn, vec<tree, va_gc> *args,
                       tsubst_flags_t complain)
 {
   tree identifier = NULL_TREE;
@@ -2083,7 +2081,7 @@ perform_koenig_lookup (tree fn, vec<tree, va_gc> *args, bool include_std,
   if (!any_type_dependent_arguments_p (args)
       && !any_dependent_template_arguments_p (tmpl_args))
     {
-      fn = lookup_arg_dependent (identifier, functions, args, include_std);
+      fn = lookup_arg_dependent (identifier, functions, args);
       if (!fn)
        {
          /* The unqualified name could not be resolved.  */
@@ -4643,7 +4641,7 @@ omp_reduction_lookup (location_t loc, tree id, tree type, tree *baselinkp,
        {
          vec<tree, va_gc> *args = NULL;
          vec_safe_push (args, build_reference_type (type));
-         id = perform_koenig_lookup (id, args, false, tf_none);
+         id = perform_koenig_lookup (id, args, tf_none);
        }
     }
   else if (TREE_CODE (id) == SCOPE_REF)
index ebc453d590123b3e384e323148559b10137f2277..0950914255ef2a791bc7b8684c97942617bbdb6a 100644 (file)
@@ -1,3 +1,10 @@
+2014-01-03  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       Core DR 1442
+       PR c++/59165
+       * g++.dg/cpp0x/range-for28.C: New.
+       * g++.dg/cpp0x/range-for3.C: Update.
+
 2014-01-02  Joseph Myers  <joseph@codesourcery.com>
 
        * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for28.C b/gcc/testsuite/g++.dg/cpp0x/range-for28.C
new file mode 100644 (file)
index 0000000..5007349
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/59165
+// { dg-require-effective-target c++11 }
+
+namespace std {
+int* begin(int i) { return (int*)0; }
+int* end(int i) { return (int*)0; }
+}
+
+int main() {
+  for (int a : 10) { }  // { dg-error "was not declared" }
+}
index c2204f91758f8000f783f34453a74674b7a17452..2f1ce382651958c155290f5e80f38a7086759c66 100644 (file)
@@ -36,7 +36,7 @@ namespace std
 int main()
 {
     container c(1,4);
-    for (int it : c)
+    for (int it : c)    // { dg-error "was not declared" }
     {
     }
 }