$NetBSD: patch-ab,v 1.2 2010/02/14 21:30:51 dholland Exp $ Patch out illegal C constructs. --- ../gcc-3.1/gcc/cp/decl.c~ 2002-05-03 18:55:23.000000000 +0000 +++ ../gcc-3.1/gcc/cp/decl.c @@ -458,6 +458,11 @@ struct binding_level ? cp_function_chain->bindings \ : scope_chain->bindings) +#define current_binding_level__LVALUE \ + (*(cfun && cp_function_chain->bindings \ + ? &cp_function_chain->bindings \ + : &scope_chain->bindings)) + /* The binding level of the current class, if any. */ #define class_binding_level scope_chain->class_bindings @@ -507,7 +512,7 @@ push_binding_level (newlevel, tag_transp are active. */ memset ((char*) newlevel, 0, sizeof (struct binding_level)); newlevel->level_chain = current_binding_level; - current_binding_level = newlevel; + current_binding_level__LVALUE = newlevel; newlevel->tag_transparent = tag_transparent; newlevel->more_cleanups_ok = 1; @@ -563,7 +568,7 @@ pop_binding_level () #endif /* defined(DEBUG_CP_BINDING_LEVELS) */ { register struct binding_level *level = current_binding_level; - current_binding_level = current_binding_level->level_chain; + current_binding_level__LVALUE = current_binding_level->level_chain; level->level_chain = free_binding_level; #if 0 /* defined(DEBUG_CP_BINDING_LEVELS) */ if (level->binding_depth != binding_depth) @@ -578,7 +583,7 @@ static void suspend_binding_level () { if (class_binding_level) - current_binding_level = class_binding_level; + current_binding_level__LVALUE = class_binding_level; if (global_binding_level) { @@ -600,7 +605,7 @@ suspend_binding_level () } is_class_level = 0; #endif /* defined(DEBUG_CP_BINDING_LEVELS) */ - current_binding_level = current_binding_level->level_chain; + current_binding_level__LVALUE = current_binding_level->level_chain; find_class_binding_level (); } @@ -613,7 +618,7 @@ resume_binding_level (b) my_friendly_assert(!class_binding_level, 386); /* Also, resuming a non-directly nested namespace is a no-no. */ my_friendly_assert(b->level_chain == current_binding_level, 386); - current_binding_level = b; + current_binding_level__LVALUE = b; #if defined(DEBUG_CP_BINDING_LEVELS) b->binding_depth = binding_depth; indent (); @@ -4292,9 +4297,9 @@ pushdecl_with_scope (x, level) else { b = current_binding_level; - current_binding_level = level; + current_binding_level__LVALUE = level; x = pushdecl (x); - current_binding_level = b; + current_binding_level__LVALUE = b; } current_function_decl = function_decl; return x; @@ -6515,7 +6520,7 @@ cxx_init_decl_processing () current_lang_name = lang_name_c; current_function_decl = NULL_TREE; - current_binding_level = NULL_BINDING_LEVEL; + current_binding_level__LVALUE = NULL_BINDING_LEVEL; free_binding_level = NULL_BINDING_LEVEL; build_common_tree_nodes (flag_signed_char); @@ -10080,10 +10085,10 @@ grokdeclarator (declarator, declspecs, d if (decl_context == NORMAL && !toplevel_bindings_p ()) { struct binding_level *b = current_binding_level; - current_binding_level = b->level_chain; + current_binding_level__LVALUE = b->level_chain; if (current_binding_level != 0 && toplevel_bindings_p ()) decl_context = PARM; - current_binding_level = b; + current_binding_level__LVALUE = b; } if (name == NULL) @@ -13720,7 +13725,7 @@ start_function (declspecs, declarator, a FIXME factor out the non-RTL stuff. */ bl = current_binding_level; init_function_start (decl1, input_filename, lineno); - current_binding_level = bl; + current_binding_level__LVALUE = bl; /* Even though we're inside a function body, we still don't want to call expand_expr to calculate the size of a variable-sized array.