diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ff6b55ab3bf..edc78a5cbed 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +1998-06-29 Brendan Kehoe + + * tree.c (build_srcloc): Make sure we allocate this node on the + permanent obstack. + Sat Jun 27 23:34:18 1998 Fred Fish * g++spec.c (NEED_MATH_LIBRARY): Define to 1 if not already defined. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 617c4cf5ebc..952da29a12a 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -211,6 +211,12 @@ lvalue_p (ref) return (lvalue_p (TREE_OPERAND (ref, 0)) && lvalue_p (TREE_OPERAND (ref, 1))); + case NOP_EXPR: + /* GNU extension: + A cast is a valid lvalue if its operand is an lvalue. */ + if (! pedantic) + return lvalue_p (TREE_OPERAND (ref, 0)); + default: break; } @@ -2300,9 +2306,21 @@ build_srcloc (file, line) char *file; int line; { - tree t = make_node (SRCLOC); + tree t; + + /* Make sure that we put these on the permanent obstack; up in + add_pending_template, we pass this return value into perm_tree_cons, + which also puts it on the permanent_obstack. However, this wasn't + explicitly doing the same. */ + register struct obstack *ambient_obstack = current_obstack; + current_obstack = &permanent_obstack; + + t = make_node (SRCLOC); SRCLOC_FILE (t) = file; SRCLOC_LINE (t) = line; + + current_obstack = ambient_obstack; + return t; }