aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2003-08-26 09:16:16 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2003-08-26 09:16:16 +0000
commit6d9a0a36e54c29474dc5cd1bafd7efe5600d23e9 (patch)
tree2c4c57aeeadaea119c1e2808f2ac3a9936111080
parent20b506726b1e07f028fa81ffc80f5081aabaea02 (diff)
downloadgcc-6d9a0a36e54c29474dc5cd1bafd7efe5600d23e9.zip
gcc-6d9a0a36e54c29474dc5cd1bafd7efe5600d23e9.tar.gz
gcc-6d9a0a36e54c29474dc5cd1bafd7efe5600d23e9.tar.bz2
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
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/decl.c4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/lookup/crash1.C31
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;;);
+}
+