diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2000-12-05 15:35:59 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2000-12-05 15:35:59 +0000 |
commit | 61402b802aafc9dfc34536858decdefce1748bf6 (patch) | |
tree | 936afa192edd41da88d835e592de28663dd4890b /gcc/cp/cvt.c | |
parent | 4839149c4ce8911c2532bb8f32e82d0aa9c28410 (diff) | |
download | gcc-61402b802aafc9dfc34536858decdefce1748bf6.zip gcc-61402b802aafc9dfc34536858decdefce1748bf6.tar.gz gcc-61402b802aafc9dfc34536858decdefce1748bf6.tar.bz2 |
typeck.c (get_delta_difference): If via a virtual base, return zero.
cp:
* typeck.c (get_delta_difference): If via a virtual base,
return zero.
* cvt.c (cp_convert_to_pointer): If via a virtual base, do no
adjustment.
testsuite:
* g++.old-deja/g++.mike/pmf5.C: Remove test.
From-SVN: r38039
Diffstat (limited to 'gcc/cp/cvt.c')
-rw-r--r-- | gcc/cp/cvt.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index fe99c8f..1672f26 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -209,10 +209,9 @@ cp_convert_to_pointer (type, expr, force) if (virt_binfo) { if (force) - cp_warning ("pointer to member cast via virtual base `%T' of `%T' will only work for objects of dynamic type `%T'", + cp_warning ("pointer to member cast via virtual base `%T' of `%T'", BINFO_TYPE (virt_binfo), - BINFO_TYPE (BINFO_INHERITANCE_CHAIN (virt_binfo)), - code == MINUS_EXPR ? b2 : b1); + BINFO_TYPE (BINFO_INHERITANCE_CHAIN (virt_binfo))); else { cp_error ("pointer to member cast via virtual base `%T' of `%T'", @@ -220,13 +219,16 @@ cp_convert_to_pointer (type, expr, force) BINFO_TYPE (BINFO_INHERITANCE_CHAIN (virt_binfo))); return error_mark_node; } + /* This is a reinterpret cast, whose result is unspecified. + We choose to do nothing. */ + return build1 (NOP_EXPR, type, expr); } if (TREE_CODE (expr) == PTRMEM_CST) expr = cplus_expand_constant (expr); - if (binfo && ! TREE_VIA_VIRTUAL (binfo)) - expr = size_binop (code, convert (sizetype,expr), + if (binfo) + expr = size_binop (code, convert (sizetype, expr), BINFO_OFFSET (binfo)); } else if (TYPE_PTRMEMFUNC_P (type)) |