From 6d9a0a36e54c29474dc5cd1bafd7efe5600d23e9 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 26 Aug 2003 09:16:16 +0000 Subject: [PATCH] re PR c++/11871 (Koenig lookup regression) cp: PR c++/11871 * decl.c (push_class_level_binding): Correct old_decl value from my 2003-07-29 reorganization. testsuite: PR c++/11871 * c++.dg/lookup/crash1.C: New test. From-SVN: r70803 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/decl.c | 4 +++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/lookup/crash1.C | 31 ++++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/lookup/crash1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 692937ea36a..7079968f990 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2003-08-26 Nathan Sidwell + 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 d89ec9161c6..0f6d09061b8 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 608a27c7d1f..200a4e38d46 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2003-08-26 Nathan Sidwell + PR c++/11871 + * c++.dg/lookup/crash1.C: New test. + * c++.dg/warn/noeffect3.C: New test. 2003-08-25 Janis Johnson diff --git a/gcc/testsuite/g++.dg/lookup/crash1.C b/gcc/testsuite/g++.dg/lookup/crash1.C new file mode 100644 index 00000000000..cd90685c70d --- /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 +// Origin pr 11871 Dirk Mueller + +// PR c++/11871 Regression + +namespace std +{ + class A + { + public: + enum result + { + ok + }; + }; + + template class B : public A + { + public: + typedef A::result result; + }; +} + +int main() +{ + for(float result = 1.0;;); +} + -- 2.30.2