aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/name-lookup.c18
2 files changed, 11 insertions, 10 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6db47ed..78269de 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2017-05-11 Nathan Sidwell <nathan@acm.org>
+ * name-lookup.c (pushdecl_outermost_localscope): Always
+ conditionally stop timer.
+
* decl.c (xref_tag_1): Don't frob ts_lambda scope here.
* name-lookup.c (pushtag_1): Deal with ts_lambda scope.
diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index 552a75f..b5a60e3 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -2874,19 +2874,17 @@ pushdecl_with_scope_1 (tree x, cp_binding_level *level, bool is_friend)
tree
pushdecl_outermost_localscope (tree x)
{
+ cp_binding_level *b = NULL;
bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
- cp_binding_level *b = NULL, *n = current_binding_level;
- if (n->kind == sk_function_parms)
- return error_mark_node;
- do
- {
- b = n;
- n = b->level_chain;
- }
- while (n->kind != sk_function_parms);
- tree ret = pushdecl_with_scope_1 (x, b, false);
+ /* Find the scope just inside the function parms. */
+ for (cp_binding_level *n = current_binding_level;
+ n->kind != sk_function_parms; n = b->level_chain)
+ b = n;
+
+ tree ret = b ? pushdecl_with_scope_1 (x, b, false) : error_mark_node;
timevar_cond_stop (TV_NAME_LOOKUP, subtime);
+
return ret;
}