diff options
| author | Nathan Sidwell <nathan@codesourcery.com> | 2003-12-23 09:02:12 +0000 |
|---|---|---|
| committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2003-12-23 09:02:12 +0000 |
| commit | 5d027e7b0312df4d691c9e5fb90020e41a034af9 (patch) | |
| tree | ae015fce692d5b02e73ddf17575b92ccb278820c /gcc/cp/cp-lang.c | |
| parent | 4b8a63d6c27da50c38587c25f6c2211047648d62 (diff) | |
| download | gcc-5d027e7b0312df4d691c9e5fb90020e41a034af9.zip gcc-5d027e7b0312df4d691c9e5fb90020e41a034af9.tar.gz gcc-5d027e7b0312df4d691c9e5fb90020e41a034af9.tar.bz2 | |
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
Diffstat (limited to 'gcc/cp/cp-lang.c')
| -rw-r--r-- | gcc/cp/cp-lang.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index d9959e0..94cf462 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) |
