diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0e1012f817176dac36f04e8452155ea04bf3b20b..6e44c4fcf62d731d42ba10538bc6ef1bda8714f4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 1999-08-18 Mark Mitchell <mark@codesourcery.com> + * search.c (setup_class_bindings): Robustify. + * typeck.c (common_type): Use same_type_p, not pointer equality, + to compare types. + * cp-tree.h (build_lang_field_decl): Remove. * class.c (build_vtable): Replace calls to build_lang_field_decl with build_lang_decl. diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 300d7107cf4a9c6d92c48439c207d2cdf5d6673b..62fa4024b9ba58447f282b346c35e6b984bf679c 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -2960,7 +2960,7 @@ setup_class_bindings (name, type_binding_p) binding. This means that we already processed this binding above. */ my_friendly_assert (type_binding_p, 19990401); - else + else if (value_binding) { if (TREE_CODE (value_binding) == TREE_LIST && TREE_TYPE (value_binding) == error_mark_node) diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 5d12bee3ada6601a7ae5fc1ad245489f57cc2162..716fe19323d0e2e3317f66b9a751bb019d0af13e 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -698,7 +698,7 @@ common_type (t1, t2) tt1 = TYPE_MAIN_VARIANT (tt1); tt2 = TYPE_MAIN_VARIANT (tt2); - if (tt1 == tt2) + if (same_type_p (tt1, tt2)) target = tt1; else if (b1) { diff --git a/gcc/testsuite/g++.old-deja/g++.pt/crash46.C b/gcc/testsuite/g++.old-deja/g++.pt/crash46.C new file mode 100644 index 0000000000000000000000000000000000000000..e226559429d57021ec925a0f6f25ec6857fd0d3e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/crash46.C @@ -0,0 +1,8 @@ +// Build don't link: +// Origin: Leon Bottou <leonb@research.att.com> + +class AA { protected: + template <class T> struct BB { T x; BB(const T &x) : x(x) { }; }; + template <class T> struct CC : public BB<T> { CC(const T &x) : BB<T>(x) { }; +}; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/crash47.C b/gcc/testsuite/g++.old-deja/g++.pt/crash47.C new file mode 100644 index 0000000000000000000000000000000000000000..96a23fd5c273ff839628a4b109de33bf08b29e88 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/crash47.C @@ -0,0 +1,17 @@ +// Build don't link: +// Origin: Rick Campbell <rick.campbell@db.com> + +template <class Owner, typename Type> +struct DataMember +{ + inline DataMember (Type Owner::* data_member); + + Type Owner::* _data_member; +}; + +template <class Owner, typename Type> +inline +DataMember<Owner,Type>::DataMember (Type Owner::* data_member) + : _data_member (data_member) +{ +}