diff options
author | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-12-05 15:35:59 +0000 |
---|---|---|
committer | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-12-05 15:35:59 +0000 |
commit | 1bbb5947018b45db17d79d27e3f6e63980f95cc9 (patch) | |
tree | 936afa192edd41da88d835e592de28663dd4890b /gcc/cp/cvt.c | |
parent | 5d406f8dcfc583022ee2435c9fbc31414da2598b (diff) | |
download | gcc-1bbb5947018b45db17d79d27e3f6e63980f95cc9.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38039 138bc75d-0d04-0410-961f-82ee72b054a4
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 fe99c8f566e..1672f26f82b 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)) |