From fd3f43e7a5cf39dcb1baff29957f9690a570c41e Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 10 Jan 2001 15:30:59 +0000 Subject: [PATCH] class.c (duplicate_tag_error): Clear more flags. cp: * class.c (duplicate_tag_error): Clear more flags. testsuite: * g++.old_deja/g++.other/crash39.C: New test. From-SVN: r38867 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/class.c | 20 +++++++++++++++++++ gcc/testsuite/ChangeLog | 4 ++++ .../g++.old-deja/g++.other/crash39.C | 18 +++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/crash39.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e84c48a50a2..6146404b21e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2001-01-10 Nathan Sidwell + + * class.c (duplicate_tag_error): Clear more flags. + 2001-01-10 Nathan Sidwell * call.c (build_new_method_call): Use binfo_for_vbase. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index ada9779ec93..9079f97dda1 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -2374,6 +2374,26 @@ duplicate_tag_error (t) TYPE_VFIELD (t) = NULL_TREE; TYPE_CONTEXT (t) = NULL_TREE; TYPE_NONCOPIED_PARTS (t) = NULL_TREE; + + TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = 0; + TYPE_HAS_CONSTRUCTOR (t) = 0; + TYPE_HAS_DESTRUCTOR (t) = 0; + TYPE_HAS_CONVERSION (t) = 0; + TYPE_HAS_ASSIGN_REF (t) = 0; + TYPE_HAS_CONST_ASSIGN_REF (t) = 0; + TYPE_HAS_INIT_REF (t) = 0; + TYPE_HAS_CONST_INIT_REF (t) = 0; + TYPE_HAS_NEW_OPERATOR (t) = 0; + TYPE_HAS_ARRAY_NEW_OPERATOR (t) = 0; + TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0; + CLASSTYPE_HAS_MUTABLE (t) = 0; + CLASSTYPE_NON_POD_P (t) = 0; + CLASSTYPE_NEARLY_EMPTY_P (t) = 0; + CLASSTYPE_NON_AGGREGATE (t) = 0; + TYPE_HAS_REAL_ASSIGN_REF (t) = 0; + TYPE_HAS_COMPLEX_ASSIGN_REF (t) = 0; + TYPE_HAS_ABSTRACT_ASSIGN_REF (t) = 0; + TYPE_HAS_COMPLEX_INIT_REF (t) = 0; } /* Make the BINFO's vtablehave N entries, including RTTI entries, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0dcc078c27e..c4ae1e2f917 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-01-10 Nathan Sidwell + + * g++.old_deja/g++.other/crash39.C: New test. + 2001-01-10 Nathan Sidwell * g++.old_deja/g++.other/vbase4.C: New test. diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash39.C b/gcc/testsuite/g++.old-deja/g++.other/crash39.C new file mode 100644 index 00000000000..0dbd395a198 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/crash39.C @@ -0,0 +1,18 @@ +// Build don't link: + +// Copyright (C) 2000 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 10 Jan 2001 + +// Bug 595. We failed to clear out some things after seeing a duplicate +// struct definition. That caused us to become inconsistent. + +struct X +{ + ~X (); +}; +struct S { X a; }; // ERROR - previous defn +struct S { X a; }; // ERROR - redefinition + +void c1(S s) +{ +}