diff options
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/decl.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/crash1.C | 31 |
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 692937e..7079968 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2003-08-26 Nathan Sidwell <nathan@codesourcery.com> + PR c++/11871 + * decl.c (push_class_level_binding): Correct old_decl value from + my 2003-07-29 reorganization. + * call.c (build_call): Don't set TREE_SIDE_EFFECTS here. (build_new_method_call): Add goto finish. * semantics.c (simplify_aggr_init_exprs_r): Don't set diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index d89ec91..0f6d090 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4282,11 +4282,13 @@ push_class_level_binding (tree name, tree x) if (TREE_CODE (bval) == TYPE_DECL && DECL_ARTIFICIAL (bval) && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x))) { + old_decl = BINDING_TYPE (binding); BINDING_TYPE (binding) = bval; BINDING_VALUE (binding) = NULL_TREE; INHERITED_VALUE_BINDING_P (binding) = 0; } - old_decl = bval; + else + old_decl = bval; } else if (TREE_CODE (x) == OVERLOAD && is_overloaded_fn (bval)) old_decl = bval; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 608a27c..200a4e3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2003-08-26 Nathan Sidwell <nathan@codesourcery.com> + PR c++/11871 + * c++.dg/lookup/crash1.C: New test. + * c++.dg/warn/noeffect3.C: New test. 2003-08-25 Janis Johnson <janis187@us.ibm.com> diff --git a/gcc/testsuite/g++.dg/lookup/crash1.C b/gcc/testsuite/g++.dg/lookup/crash1.C new file mode 100644 index 0000000..cd90685 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/crash1.C @@ -0,0 +1,31 @@ +// { dg-do compile } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 25 Aug 2003 <nathan@codesourcery.com> +// Origin pr 11871 Dirk Mueller <mueller@kde.org> + +// PR c++/11871 Regression + +namespace std +{ + class A + { + public: + enum result + { + ok + }; + }; + + template<typename T> class B : public A + { + public: + typedef A::result result; + }; +} + +int main() +{ + for(float result = 1.0;;); +} + |