From 5d027e7b0312df4d691c9e5fb90020e41a034af9 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 23 Dec 2003 09:02:12 +0000 Subject: [PATCH] re PR c++/13387 (assignment to base class corrupts subclass) PR c++/13387 * cp-lang.c (cxx_get_alias_set): Correct logic for a base type. From-SVN: r74968 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/cp-lang.c | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9e39313868a9..69cbbed94b36 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-12-23 Nathan Sidwell + + PR c++/13387 + * cp-lang.c (cxx_get_alias_set): Correct logic for a base type. + 2003-12-22 Mark Mitchell * decl.c (start_function): Do not check diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index d9959e031ed9..94cf4623ee83 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -292,11 +292,12 @@ ok_to_generate_alias_set_for_type (tree t) static HOST_WIDE_INT cxx_get_alias_set (tree t) { - if (CLASS_TYPE_P (t) && TYPE_CONTEXT (t) && CLASS_TYPE_P (TYPE_CONTEXT (t)) + if (TREE_CODE (t) == RECORD_TYPE + && TYPE_CONTEXT (t) && CLASS_TYPE_P (TYPE_CONTEXT (t)) && CLASSTYPE_AS_BASE (TYPE_CONTEXT (t)) == t) /* The base variant of a type must be in the same alias set as the complete type. */ - t = TYPE_CONTEXT (t); + return get_alias_set (TYPE_CONTEXT (t)); if (/* It's not yet safe to use alias sets for some classes in C++. */ !ok_to_generate_alias_set_for_type (t)