aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2018-05-07 23:04:22 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2018-05-07 23:04:22 +0000
commitee336e846de46aa5523a96f712d247c31a07c6e1 (patch)
tree8c66e81acd1034522f08d278a608f49f42e64ee3 /gcc
parent1d473b8b9dd499a5e34d6a05d9ef2f4b521d1056 (diff)
downloadgcc-ee336e846de46aa5523a96f712d247c31a07c6e1.zip
gcc-ee336e846de46aa5523a96f712d247c31a07c6e1.tar.gz
gcc-ee336e846de46aa5523a96f712d247c31a07c6e1.tar.bz2
[C++ PATCH] Kill -fno-for-scope
https://gcc.gnu.org/ml/gcc-patches/2018-05/msg00299.html gcc/cp/ Remove fno-for-scope * cp-tree.h (DECL_ERROR_REPORTED, DECL_DEAD_FOR_LOCAL) (DECL_HAS_SHADOWED_FOR_VAR_P, DECL_SHADOWED_FOR_VAR) (SET_DECL_SHADOWED_FOR_VAR): Delete. (decl_shadowed_for_var_lookup, decl_shadowed_for_var_insert) (check_for_out_of_scope_variable, init_shadowed_var_for_decl): Don't declare. * name-lookup.h (struct cp_binding_level): Remove dead_vars_from_for field. * cp-lang.c (cp_init_ts): Delete. (LANG_HOOKS_INIT_TS): Override to cp_common_init_ts. * cp-objcp-common.c (shadowed_var_for_decl): Delete. (decl_shadowed_for_var_lookup, decl_shadowed_for_var_insert) (init_shadowed_var_for_decl): Delete. * decl.c (poplevel): Remove shadowed for var handling. (cxx_init_decl_processing): Remove -ffor-scope deprecation. * name-lookup.c (find_local_binding): Remove shadowed for var handling. (check_local_shadow): Likewise. (check_for_out_of_scope_variable): Delete. * parser.c (cp_parser_primary_expression): Remove shadowed for var handling. * pt.c (tsubst_decl): Remove DECL_DEAD_FOR_LOCAL setting. * semantics.c (begin_for_scope): Always have a scope. (begin_for_stmt, finish_for_stmt): Remove ARM-for scope handling. (begin_range_for_stmt, finish_id_expression): Likewise. gcc/ * doc/invoke.texi (C++ Dialect Options): Remove -ffor-scope. * doc/extend.texi (Deprecated Features): Remove -fno-for-scope (Backwards Compatibility): Likewise. c-family/ * c.opt (ffor-scope): Remove functionality, issue warning. gcc/objcp/ * objcp-lang.c (objcxx_init_ts): Don't call init_shadowed_var_for_decl. gcc/testsuite/ * g++.dg/cpp0x/range-for10.C: Delete. * g++.dg/ext/forscope1.C: Delete. * g++.dg/ext/forscope2.C: Delete. * g++.dg/template/for1.C: Delete. From-SVN: r260015
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-family/ChangeLog4
-rw-r--r--gcc/c-family/c.opt3
-rw-r--r--gcc/cp/ChangeLog29
-rw-r--r--gcc/cp/cp-lang.c11
-rw-r--r--gcc/cp/cp-objcp-common.c37
-rw-r--r--gcc/cp/cp-tree.h32
-rw-r--r--gcc/cp/decl.c84
-rw-r--r--gcc/cp/name-lookup.c84
-rw-r--r--gcc/cp/name-lookup.h5
-rw-r--r--gcc/cp/parser.c25
-rw-r--r--gcc/cp/pt.c3
-rw-r--r--gcc/cp/semantics.c42
-rw-r--r--gcc/doc/extend.texi24
-rw-r--r--gcc/doc/invoke.texi17
-rw-r--r--gcc/objcp/ChangeLog8
-rw-r--r--gcc/objcp/objcp-lang.c2
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/range-for10.C18
-rw-r--r--gcc/testsuite/g++.dg/ext/forscope1.C27
-rw-r--r--gcc/testsuite/g++.dg/ext/forscope2.C27
-rw-r--r--gcc/testsuite/g++.dg/template/for1.C23
22 files changed, 77 insertions, 441 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cb5582b..868c87d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-05-07 Nathan Sidwell <nathan@acm.org>
+
+ * doc/invoke.texi (C++ Dialect Options): Remove -ffor-scope.
+ * doc/extend.texi (Deprecated Features): Remove -fno-for-scope
+ (Backwards Compatibility): Likewise.
+
2018-05-07 Luis Machado <luis.machado@linaro.org>
PR bootstrap/85681
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 56391e5..087379f 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,7 @@
+2018-05-07 Nathan Sidwell <nathan@acm.org>
+
+ * c.opt (ffor-scope): Remove functionality, issue warning.
+
2018-05-03 Nathan Sidwell <nathan@acm.org>
* c.opt (ffriend-injection): Remove functionality, issue warning.
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 5013501..c48d6dc 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -1441,8 +1441,7 @@ fexternal-templates
C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
ffor-scope
-C++ ObjC++ Var(flag_new_for_scope) Init(1)
-Scope of for-init-statement variables is local to the loop.
+C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
ffreestanding
C ObjC C++ ObjC++
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8ab3d36..75f5207 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,32 @@
+2018-05-07 Nathan Sidwell <nathan@acm.org>
+
+ Remove fno-for-scope
+ * cp-tree.h (DECL_ERROR_REPORTED, DECL_DEAD_FOR_LOCAL)
+ (DECL_HAS_SHADOWED_FOR_VAR_P, DECL_SHADOWED_FOR_VAR)
+ (SET_DECL_SHADOWED_FOR_VAR): Delete.
+ (decl_shadowed_for_var_lookup, decl_shadowed_for_var_insert)
+ (check_for_out_of_scope_variable, init_shadowed_var_for_decl):
+ Don't declare.
+ * name-lookup.h (struct cp_binding_level): Remove
+ dead_vars_from_for field.
+ * cp-lang.c (cp_init_ts): Delete.
+ (LANG_HOOKS_INIT_TS): Override to cp_common_init_ts.
+ * cp-objcp-common.c (shadowed_var_for_decl): Delete.
+ (decl_shadowed_for_var_lookup, decl_shadowed_for_var_insert)
+ (init_shadowed_var_for_decl): Delete.
+ * decl.c (poplevel): Remove shadowed for var handling.
+ (cxx_init_decl_processing): Remove -ffor-scope deprecation.
+ * name-lookup.c (find_local_binding): Remove shadowed for var
+ handling.
+ (check_local_shadow): Likewise.
+ (check_for_out_of_scope_variable): Delete.
+ * parser.c (cp_parser_primary_expression): Remove shadowed for var
+ handling.
+ * pt.c (tsubst_decl): Remove DECL_DEAD_FOR_LOCAL setting.
+ * semantics.c (begin_for_scope): Always have a scope.
+ (begin_for_stmt, finish_for_stmt): Remove ARM-for scope handling.
+ (begin_range_for_stmt, finish_id_expression): Likewise.
+
2018-05-07 Jason Merrill <jason@redhat.com>
PR c++/85618 - ICE with initialized VLA.
diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c
index 6007094..26a1e6d 100644
--- a/gcc/cp/cp-lang.c
+++ b/gcc/cp/cp-lang.c
@@ -28,7 +28,6 @@ along with GCC; see the file COPYING3. If not see
#include "cp-objcp-common.h"
enum c_language_kind c_language = clk_cxx;
-static void cp_init_ts (void);
static const char * cxx_dwarf_name (tree t, int verbosity);
static enum classify_record cp_classify_record (tree type);
static tree cp_eh_personality (void);
@@ -71,7 +70,7 @@ static tree cxx_enum_underlying_base_type (const_tree);
#undef LANG_HOOKS_DWARF_NAME
#define LANG_HOOKS_DWARF_NAME cxx_dwarf_name
#undef LANG_HOOKS_INIT_TS
-#define LANG_HOOKS_INIT_TS cp_init_ts
+#define LANG_HOOKS_INIT_TS cp_common_init_ts
#undef LANG_HOOKS_EH_PERSONALITY
#define LANG_HOOKS_EH_PERSONALITY cp_eh_personality
#undef LANG_HOOKS_EH_RUNTIME_TYPE
@@ -102,14 +101,6 @@ objcp_tsubst_copy_and_build (tree /*t*/,
return NULL_TREE;
}
-static void
-cp_init_ts (void)
-{
- cp_common_init_ts ();
-
- init_shadowed_var_for_decl ();
-}
-
static const char *
cxx_dwarf_name (tree t, int verbosity)
{
diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c
index 5289a89..25f0b3e 100644
--- a/gcc/cp/cp-objcp-common.c
+++ b/gcc/cp/cp-objcp-common.c
@@ -298,43 +298,6 @@ has_c_linkage (const_tree decl)
return DECL_EXTERN_C_P (decl);
}
-static GTY ((cache))
- hash_table<tree_decl_map_cache_hasher> *shadowed_var_for_decl;
-
-/* Lookup a shadowed var for FROM, and return it if we find one. */
-
-tree
-decl_shadowed_for_var_lookup (tree from)
-{
- struct tree_decl_map *h, in;
- in.base.from = from;
-
- h = shadowed_var_for_decl->find_with_hash (&in, DECL_UID (from));
- if (h)
- return h->to;
- return NULL_TREE;
-}
-
-/* Insert a mapping FROM->TO in the shadowed var hashtable. */
-
-void
-decl_shadowed_for_var_insert (tree from, tree to)
-{
- struct tree_decl_map *h;
-
- h = ggc_alloc<tree_decl_map> ();
- h->base.from = from;
- h->to = to;
- *shadowed_var_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
-}
-
-void
-init_shadowed_var_for_decl (void)
-{
- shadowed_var_for_decl
- = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
-}
-
/* Return true if stmt can fall through. Used by block_may_fallthru
default case. */
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index d5ef6d3..2df158c 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -447,8 +447,7 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
6: TYPE_DEPENDENT_P_VALID
Usage of DECL_LANG_FLAG_?:
- 0: DECL_ERROR_REPORTED (in VAR_DECL).
- DECL_TEMPLATE_PARM_P (in PARM_DECL, CONST_DECL, TYPE_DECL, or TEMPLATE_DECL)
+ 0: DECL_TEMPLATE_PARM_P (in PARM_DECL, CONST_DECL, TYPE_DECL, or TEMPLATE_DECL)
DECL_LOCAL_FUNCTION_P (in FUNCTION_DECL)
DECL_MUTABLE_P (in FIELD_DECL)
DECL_DEPENDENT_P (in USING_DECL)
@@ -475,8 +474,7 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
6: DECL_THIS_STATIC (in VAR_DECL or FUNCTION_DECL).
DECL_FIELD_IS_BASE (in FIELD_DECL)
TYPE_DECL_ALIAS_P (in TYPE_DECL)
- 7: DECL_DEAD_FOR_LOCAL (in VAR_DECL).
- DECL_THUNK_P (in a member FUNCTION_DECL)
+ 7: DECL_THUNK_P (in a member FUNCTION_DECL)
DECL_NORMAL_CAPTURE_P (in FIELD_DECL)
8: DECL_DECLARED_CONSTEXPR_P (in VAR_DECL, FUNCTION_DECL)
@@ -3212,9 +3210,6 @@ struct GTY(()) lang_decl {
was inherited from a template parameter, not explicitly indicated. */
#define ABI_TAG_IMPLICIT(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE))
-extern tree decl_shadowed_for_var_lookup (tree);
-extern void decl_shadowed_for_var_insert (tree, tree);
-
/* Non zero if this is a using decl for a dependent scope. */
#define DECL_DEPENDENT_P(NODE) DECL_LANG_FLAG_0 (USING_DECL_CHECK (NODE))
@@ -3227,19 +3222,6 @@ extern void decl_shadowed_for_var_insert (tree, tree);
/* Non zero if the using decl refers to a dependent type. */
#define USING_DECL_TYPENAME_P(NODE) DECL_LANG_FLAG_1 (USING_DECL_CHECK (NODE))
-/* In a VAR_DECL, true if we have a shadowed local variable
- in the shadowed var table for this VAR_DECL. */
-#define DECL_HAS_SHADOWED_FOR_VAR_P(NODE) \
- (VAR_DECL_CHECK (NODE)->decl_with_vis.shadowed_for_var_p)
-
-/* In a VAR_DECL for a variable declared in a for statement,
- this is the shadowed (local) variable. */
-#define DECL_SHADOWED_FOR_VAR(NODE) \
- (DECL_HAS_SHADOWED_FOR_VAR_P(NODE) ? decl_shadowed_for_var_lookup (NODE) : NULL)
-
-#define SET_DECL_SHADOWED_FOR_VAR(NODE, VAL) \
- (decl_shadowed_for_var_insert (NODE, VAL))
-
/* In a FUNCTION_DECL, this is nonzero if this function was defined in
the class definition. We have saved away the text of the function,
but have not yet processed it. */
@@ -3844,14 +3826,6 @@ more_aggr_init_expr_args_p (const aggr_init_expr_arg_iterator *iter)
#define TYPE_CONTAINS_VPTR_P(NODE) \
(TYPE_POLYMORPHIC_P (NODE) || CLASSTYPE_VBASECLASSES (NODE))
-/* This flag is true of a local VAR_DECL if it was declared in a for
- statement, but we are no longer in the scope of the for. */
-#define DECL_DEAD_FOR_LOCAL(NODE) DECL_LANG_FLAG_7 (VAR_DECL_CHECK (NODE))
-
-/* This flag is set on a VAR_DECL that is a DECL_DEAD_FOR_LOCAL
- if we already emitted a warning about using it. */
-#define DECL_ERROR_REPORTED(NODE) DECL_LANG_FLAG_0 (VAR_DECL_CHECK (NODE))
-
/* Nonzero if NODE is a FUNCTION_DECL (for a function with global
scope) declared in a local scope. */
#define DECL_LOCAL_FUNCTION_P(NODE) \
@@ -6232,7 +6206,6 @@ extern tree strip_fnptr_conv (tree);
/* in name-lookup.c */
extern void maybe_push_cleanup_level (tree);
extern tree make_anon_name (void);
-extern tree check_for_out_of_scope_variable (tree);
extern tree maybe_push_decl (tree);
extern tree current_decl_namespace (void);
@@ -7403,7 +7376,6 @@ extern size_t cp_tree_size (enum tree_code);
extern bool cp_var_mod_type_p (tree, tree);
extern void cxx_initialize_diagnostics (diagnostic_context *);
extern int cxx_types_compatible_p (tree, tree);
-extern void init_shadowed_var_for_decl (void);
extern bool cxx_block_may_fallthru (const_tree);
/* in cp-gimplify.c */
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 5e67181..fccddd5 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -576,9 +576,7 @@ poplevel (int keep, int reverse, int functionbody)
tree subblocks;
tree block;
tree decl;
- int leaving_for_scope;
scope_kind kind;
- unsigned ix;
bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
restart:
@@ -639,12 +637,6 @@ poplevel (int keep, int reverse, int functionbody)
for (link = subblocks; link; link = BLOCK_CHAIN (link))
BLOCK_SUPERCONTEXT (link) = block;
- /* We still support the old for-scope rules, whereby the variables
- in a init statement were in scope after the for-statement ended.
- We only use the new rules if flag_new_for_scope is nonzero. */
- leaving_for_scope
- = current_binding_level->kind == sk_for && flag_new_for_scope;
-
/* Before we remove the declarations first check for unused variables. */
if ((warn_unused_variable || warn_unused_but_set_variable)
&& current_binding_level->kind != sk_template_parms
@@ -704,71 +696,6 @@ poplevel (int keep, int reverse, int functionbody)
decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
tree name = OVL_NAME (decl);
- if (leaving_for_scope && VAR_P (decl)
- /* It's hard to make this ARM compatibility hack play nicely with
- lambdas, and it really isn't necessary in C++11 mode. */
- && cxx_dialect < cxx11
- && name)
- {
- cxx_binding *ob = outer_binding (name,
- IDENTIFIER_BINDING (name),
- /*class_p=*/true);
- tree ns_binding = NULL_TREE;
- if (!ob)
- ns_binding = get_namespace_binding (current_namespace, name);
-
- if (ob && ob->scope == current_binding_level->level_chain)
- /* We have something like:
-
- int i;
- for (int i; ;);
-
- and we are leaving the `for' scope. There's no reason to
- keep the binding of the inner `i' in this case. */
- ;
- else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
- || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
- /* Here, we have something like:
-
- typedef int I;
-
- void f () {
- for (int I; ;);
- }
-
- We must pop the for-scope binding so we know what's a
- type and what isn't. */
- ;
- else
- {
- /* Mark this VAR_DECL as dead so that we can tell we left it
- there only for backward compatibility. */
- DECL_DEAD_FOR_LOCAL (link) = 1;
-
- /* Keep track of what should have happened when we
- popped the binding. */
- if (ob && ob->value)
- {
- SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
- DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
- }
-
- /* Add it to the list of dead variables in the next
- outermost binding to that we can remove these when we
- leave that binding. */
- vec_safe_push (
- current_binding_level->level_chain->dead_vars_from_for,
- link);
-
- /* Although we don't pop the cxx_binding, we do clear
- its SCOPE since the scope is going away now. */
- IDENTIFIER_BINDING (name)->scope
- = current_binding_level->level_chain;
-
- /* Don't remove the binding. */
- name = NULL_TREE;
- }
- }
/* Remove the binding. */
if (TREE_CODE (decl) == LABEL_DECL)
pop_local_label (name, decl);
@@ -776,12 +703,6 @@ poplevel (int keep, int reverse, int functionbody)
pop_local_binding (name, decl);
}
- /* Remove declarations for any `for' variables from inner scopes
- that we kept around. */
- FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
- ix, decl)
- pop_local_binding (DECL_NAME (decl), decl);
-
/* Restore the IDENTIFIER_TYPE_VALUEs. */
for (link = current_binding_level->type_shadowed;
link; link = TREE_CHAIN (link))
@@ -4170,11 +4091,6 @@ cxx_init_decl_processing (void)
pop_namespace ();
flag_noexcept_type = (cxx_dialect >= cxx17);
- /* There's no fixed location for <command-line>, the current
- location is <builtins>, which is somewhat confusing. */
- if (!flag_new_for_scope)
- warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
- "%<-fno-for-scope%> is deprecated");
c_common_nodes_and_builtins ();
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 9710add..8d1748a 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -144,9 +144,7 @@ find_local_binding (cp_binding_level *b, tree name)
if (cxx_binding *binding = IDENTIFIER_BINDING (name))
for (;; b = b->level_chain)
{
- if (binding->scope == b
- && !(VAR_P (binding->value)
- && DECL_DEAD_FOR_LOCAL (binding->value)))
+ if (binding->scope == b)
return binding;
/* Cleanup contours are transparent to the language. */
@@ -2632,8 +2630,6 @@ check_local_shadow (tree decl)
old = binding->value;
old_scope = binding->scope;
}
- while (old && VAR_P (old) && DECL_DEAD_FOR_LOCAL (old))
- old = DECL_SHADOWED_FOR_VAR (old);
tree shadowed = NULL_TREE;
if (old
@@ -3213,84 +3209,6 @@ push_local_binding (tree id, tree decl, bool is_using)
add_decl_to_level (b, decl);
}
-/* Check to see whether or not DECL is a variable that would have been
- in scope under the ARM, but is not in scope under the ANSI/ISO
- standard. If so, issue an error message. If name lookup would
- work in both cases, but return a different result, this function
- returns the result of ANSI/ISO lookup. Otherwise, it returns
- DECL.
-
- FIXME: Scheduled for removal after GCC-8 is done. */
-
-tree
-check_for_out_of_scope_variable (tree decl)
-{
- tree shadowed;
-
- /* We only care about out of scope variables. */
- if (!(VAR_P (decl) && DECL_DEAD_FOR_LOCAL (decl)))
- return decl;
-
- shadowed = DECL_HAS_SHADOWED_FOR_VAR_P (decl)
- ? DECL_SHADOWED_FOR_VAR (decl) : NULL_TREE ;
- while (shadowed != NULL_TREE && VAR_P (shadowed)
- && DECL_DEAD_FOR_LOCAL (shadowed))
- shadowed = DECL_HAS_SHADOWED_FOR_VAR_P (shadowed)
- ? DECL_SHADOWED_FOR_VAR (shadowed) : NULL_TREE;
- if (!shadowed)
- shadowed = find_namespace_value (current_namespace, DECL_NAME (decl));
- if (shadowed)
- {
- if (!DECL_ERROR_REPORTED (decl)
- && flag_permissive
- && warning (0, "name lookup of %qD changed", DECL_NAME (decl)))
- {
- inform (DECL_SOURCE_LOCATION (shadowed),
- "matches this %qD under ISO standard rules", shadowed);
- inform (DECL_SOURCE_LOCATION (decl),
- " matches this %qD under old rules", decl);
- }
- DECL_ERROR_REPORTED (decl) = 1;
- return shadowed;
- }
-
- /* If we have already complained about this declaration, there's no
- need to do it again. */
- if (DECL_ERROR_REPORTED (decl))
- return decl;
-
- DECL_ERROR_REPORTED (decl) = 1;
-
- if (TREE_TYPE (decl) == error_mark_node)
- return decl;
-
- if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
- {
- error ("name lookup of %qD changed for ISO %<for%> scoping",
- DECL_NAME (decl));
- inform (DECL_SOURCE_LOCATION (decl),
- "cannot use obsolete binding %qD because it has a destructor",
- decl);
- return error_mark_node;
- }
- else
- {
- permerror (input_location,
- "name lookup of %qD changed for ISO %<for%> scoping",
- DECL_NAME (decl));
- if (flag_permissive)
- inform (DECL_SOURCE_LOCATION (decl),
- "using obsolete binding %qD", decl);
- static bool hint;
- if (!hint)
- inform (input_location, flag_permissive
- ? "this flexibility is deprecated and will be removed"
- : "if you use %<-fpermissive%> G++ will accept your code");
- hint = true;
- }
-
- return decl;
-}
/* true means unconditionally make a BLOCK for the next level pushed. */
diff --git a/gcc/cp/name-lookup.h b/gcc/cp/name-lookup.h
index 8c587d3..ae225db 100644
--- a/gcc/cp/name-lookup.h
+++ b/gcc/cp/name-lookup.h
@@ -205,11 +205,6 @@ struct GTY(()) cp_binding_level {
/* The binding level which this one is contained in (inherits from). */
cp_binding_level *level_chain;
- /* List of VAR_DECLS saved from a previous for statement.
- These would be dead in ISO-conforming code, but might
- be referenced in ARM-era code. */
- vec<tree, va_gc> *dead_vars_from_for;
-
/* STATEMENT_LIST for statements in this binding contour.
Only used at present for SK_CLEANUP temporary bindings. */
tree statement_list;
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index b839232..f8ecf03 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -5585,27 +5585,10 @@ cp_parser_primary_expression (cp_parser *parser,
if (parser->local_variables_forbidden_p
&& local_variable_p (decl))
{
- /* It might be that we only found DECL because we are
- trying to be generous with pre-ISO scoping rules.
- For example, consider:
-
- int i;
- void g() {
- for (int i = 0; i < 10; ++i) {}
- extern void f(int j = i);
- }
-
- Here, name look up will originally find the out
- of scope `i'. We need to issue a warning message,
- but then use the global `i'. */
- decl = check_for_out_of_scope_variable (decl);
- if (local_variable_p (decl))
- {
- error_at (id_expr_token->location,
- "local variable %qD may not appear in this context",
- decl.get_value ());
- return error_mark_node;
- }
+ error_at (id_expr_token->location,
+ "local variable %qD may not appear in this context",
+ decl.get_value ());
+ return error_mark_node;
}
}
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index a1b2a37..c604f46 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -13683,9 +13683,6 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
}
if (VAR_P (r))
{
- /* Even if the original location is out of scope, the
- newly substituted one is not. */
- DECL_DEAD_FOR_LOCAL (r) = 0;
DECL_INITIALIZED_P (r) = 0;
DECL_TEMPLATE_INSTANTIATED (r) = 0;
if (type == error_mark_node)
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 4568bb9..2b2b51b 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -934,9 +934,7 @@ finish_return_stmt (tree expr)
tree
begin_for_scope (tree *init)
{
- tree scope = NULL_TREE;
- if (flag_new_for_scope)
- scope = do_pushlevel (sk_for);
+ tree scope = do_pushlevel (sk_for);
if (processing_template_decl)
*init = push_stmt_list ();
@@ -960,10 +958,10 @@ begin_for_stmt (tree scope, tree init)
if (scope == NULL_TREE)
{
- gcc_assert (!init || !flag_new_for_scope);
- if (!init)
- scope = begin_for_scope (&init);
+ gcc_assert (!init);
+ scope = begin_for_scope (&init);
}
+
FOR_INIT_STMT (r) = init;
FOR_SCOPE (r) = scope;
@@ -1057,16 +1055,12 @@ finish_for_stmt (tree for_stmt)
FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
/* Pop the scope for the body of the loop. */
- if (flag_new_for_scope)
- {
- tree scope;
- tree *scope_ptr = (TREE_CODE (for_stmt) == RANGE_FOR_STMT
- ? &RANGE_FOR_SCOPE (for_stmt)
- : &FOR_SCOPE (for_stmt));
- scope = *scope_ptr;
- *scope_ptr = NULL;
- add_stmt (do_poplevel (scope));
- }
+ tree *scope_ptr = (TREE_CODE (for_stmt) == RANGE_FOR_STMT
+ ? &RANGE_FOR_SCOPE (for_stmt)
+ : &FOR_SCOPE (for_stmt));
+ tree scope = *scope_ptr;
+ *scope_ptr = NULL;
+ add_stmt (do_poplevel (scope));
}
/* Begin a range-for-statement. Returns a new RANGE_FOR_STMT.
@@ -1077,18 +1071,15 @@ finish_for_stmt (tree for_stmt)
tree
begin_range_for_stmt (tree scope, tree init)
{
- tree r;
-
begin_maybe_infinite_loop (boolean_false_node);
- r = build_stmt (input_location, RANGE_FOR_STMT,
- NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE);
+ tree r = build_stmt (input_location, RANGE_FOR_STMT,
+ NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE);
if (scope == NULL_TREE)
{
- gcc_assert (!init || !flag_new_for_scope);
- if (!init)
- scope = begin_for_scope (&init);
+ gcc_assert (!init);
+ scope = begin_for_scope (&init);
}
/* RANGE_FOR_STMTs do not use nor save the init tree, so we
@@ -3560,11 +3551,6 @@ finish_id_expression (tree id_expression,
else
decl = id_expression;
}
- /* If DECL is a variable that would be out of scope under
- ANSI/ISO rules, but in scope in the ARM, name lookup
- will succeed. Issue a diagnostic here. */
- else
- decl = check_for_out_of_scope_variable (decl);
/* Remember that the name was used in the definition of
the current class so that we can check later to see if
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 253aea1..9d08584 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -23840,17 +23840,6 @@ superior alternatives. Using the old features might cause a warning in
some cases that the feature will be dropped in the future. In other
cases, the feature might be gone already.
-While the list below is not exhaustive, it documents some of the options
-that are now deprecated or have been removed:
-
-@table @code
-
-@item -fno-for-scope
-This option provides compatibility with pre-standard C++.
-@xref{Backwards Compatibility}.
-
-@end table
-
G++ allows a virtual function returning @samp{void *} to be overridden
by one returning a different pointer type. This extension to the
covariant return type rules is now deprecated and will be removed from a
@@ -23893,18 +23882,6 @@ liable to disappear in future versions of G++.} They should be considered
deprecated. @xref{Deprecated Features}.
@table @code
-@item For scope
-If a variable is declared at for scope, it used to remain in scope
-until the end of the scope that contained the for statement (rather
-than just within the for scope). The deprecated
-@option{-fno-for-scope} option enables this non-standard behavior.
-Without the option, G++ retains this, but issues a warning, if such a
-variable is accessed outside the for scope.
-
-The behavior is deprecated, only available with @option{-std=c++98}
-@option{-std=gnu++98} languages and you must use the
-@option{-fpermissive} option to enable it. The behavior will be
-removed.
@item Implicit C language
Old C system header files did not contain an @code{extern "C" @{@dots{}@}}
@@ -23912,6 +23889,7 @@ scope to set the language. On such systems, all header files are
implicitly scoped inside a C language scope. Also, an empty prototype
@code{()} is treated as an unspecified number of arguments, rather
than no arguments, as C++ demands.
+
@end table
@c LocalWords: emph deftypefn builtin ARCv2EM SIMD builtins msimd
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 255149f..94815ca 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -195,7 +195,7 @@ in the following sections.
-fconstexpr-depth=@var{n} -fconstexpr-loop-limit=@var{n} @gol
-fno-elide-constructors @gol
-fno-enforce-eh-specs @gol
--ffor-scope -fno-for-scope -fno-gnu-keywords @gol
+-fno-gnu-keywords @gol
-fno-implicit-templates @gol
-fno-implicit-inline-templates @gol
-fno-implement-inlines -fms-extensions @gol
@@ -2490,21 +2490,6 @@ On targets that support symbol aliases, the default is
@option{-fextern-tls-init}. On targets that do not support symbol
aliases, the default is @option{-fno-extern-tls-init}.
-@item -ffor-scope
-@itemx -fno-for-scope
-@opindex ffor-scope
-@opindex fno-for-scope
-If @option{-ffor-scope} is specified, the scope of variables declared in
-a @i{for-init-statement} is limited to the @code{for} loop itself,
-as specified by the C++ standard.
-If @option{-fno-for-scope} is specified, the scope of variables declared in
-a @i{for-init-statement} extends to the end of the enclosing scope,
-as was the case in old versions of G++, and other (traditional)
-implementations of C++.
-
-This option is deprecated and the associated non-standard
-functionality will be removed.
-
@item -fno-gnu-keywords
@opindex fno-gnu-keywords
Do not recognize @code{typeof} as a keyword, so that code can use this
diff --git a/gcc/objcp/ChangeLog b/gcc/objcp/ChangeLog
index 3987f20..ec829b9 100644
--- a/gcc/objcp/ChangeLog
+++ b/gcc/objcp/ChangeLog
@@ -1,3 +1,7 @@
+2018-05-07 Nathan Sidwell <nathan@acm.org>
+
+ * objcp-lang.c (objcxx_init_ts): Don't call init_shadowed_var_for_decl.
+
2018-01-03 Jakub Jelinek <jakub@redhat.com>
Update copyright years.
@@ -28,7 +32,7 @@
* objcp-decl.c: Remove unused header files.
* objcp-lang.c: Likewise.
-
+
2015-10-29 Andrew MacLeod <amacleod@redhat.com>
* objcp-decl.c: Reorder #include's and remove duplicates.
@@ -43,7 +47,7 @@
* objcp-decl.c: Do not include input.h, line-map.h or is-a.h.
* objcp-lang.c: Likewise.
-
+
2015-06-08 Andrew MacLeod <amacleod@redhat.com>
* objcp-decl.c : Adjust include files.
diff --git a/gcc/objcp/objcp-lang.c b/gcc/objcp/objcp-lang.c
index a301050..0372b60 100644
--- a/gcc/objcp/objcp-lang.c
+++ b/gcc/objcp/objcp-lang.c
@@ -87,8 +87,6 @@ objcxx_init_ts (void)
{
objc_common_init_ts ();
cp_common_init_ts ();
-
- init_shadowed_var_for_decl ();
}
#include "gtype-objcp.h"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e8b417a..df4bacb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2018-05-07 Nathan Sidwell <nathan@acm.org>
+
+ * g++.dg/cpp0x/range-for10.C: Delete.
+ * g++.dg/ext/forscope1.C: Delete.
+ * g++.dg/ext/forscope2.C: Delete.
+ * g++.dg/template/for1.C: Delete.
+
2018-05-07 Jeff Law <law@redhat.com>
* gfortran.dg/linefile.f90: New test.
diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for10.C b/gcc/testsuite/g++.dg/cpp0x/range-for10.C
deleted file mode 100644
index 7288a3b..0000000
--- a/gcc/testsuite/g++.dg/cpp0x/range-for10.C
+++ /dev/null
@@ -1,18 +0,0 @@
-// PR c++/47388
-// { dg-do compile { target c++11 } }
-// { dg-options "-fno-for-scope -Wno-deprecated" }
-
-template <int>
-void
-foo ()
-{
- int a[] = { 1, 2, 3, 4 };
- for (int i : a)
- ;
-}
-
-void
-bar ()
-{
- foo <0> ();
-}
diff --git a/gcc/testsuite/g++.dg/ext/forscope1.C b/gcc/testsuite/g++.dg/ext/forscope1.C
deleted file mode 100644
index cf0cb2c..0000000
--- a/gcc/testsuite/g++.dg/ext/forscope1.C
+++ /dev/null
@@ -1,27 +0,0 @@
-// { dg-do compile }
-// { dg-options "-fno-for-scope -Wno-deprecated" }
-
-// Copyright (C) 2001 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 4 Sept 2001 <nathan@codesourcery.com>
-
-// Bug 4206. We were nesting SCOPE_STMTs badly.
-
-
-struct A
-{
- A ();
- ~A ();
-};
-
-
-void Go( )
-{
- for (int i = 1;;)
- {
- switch (1) {
- default: {}
- }
- A d;
- }
- i;
-}
diff --git a/gcc/testsuite/g++.dg/ext/forscope2.C b/gcc/testsuite/g++.dg/ext/forscope2.C
deleted file mode 100644
index 3490d3f2..0000000
--- a/gcc/testsuite/g++.dg/ext/forscope2.C
+++ /dev/null
@@ -1,27 +0,0 @@
-// { dg-do compile }
-// { dg-options "-fpermissive -std=c++98" }
-
-// Copyright (C) 2001 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 4 Sept 2001 <nathan@codesourcery.com>
-
-// Bug 4206. We were nesting SCOPE_STMTs badly.
-
-
-struct A
-{
- A ();
- ~A ();
-};
-
-
-void Go( )
-{
- for (int i = 1;;) // { dg-message "using obsolete binding" }
- {
- switch (1) {
- default: {}
- }
- A d;
- }
- i; // { dg-warning "name lookup" }
-}
diff --git a/gcc/testsuite/g++.dg/template/for1.C b/gcc/testsuite/g++.dg/template/for1.C
deleted file mode 100644
index ebb4445..0000000
--- a/gcc/testsuite/g++.dg/template/for1.C
+++ /dev/null
@@ -1,23 +0,0 @@
-// PR c++/47388
-// { dg-do compile }
-// { dg-options "-fno-for-scope -Wno-deprecated" }
-
-template <int>
-void
-foo ()
-{
- int i;
- for (i = 0; i < 16; i++)
- ;
- for (int j = 0; j < 16; j++)
- ;
- if (j != 16)
- for (;;)
- ;
-}
-
-void
-bar ()
-{
- foo <0> ();
-}