summaryrefslogtreecommitdiff
path: root/gcc/cp/cvt.c
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2000-12-05 15:35:59 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2000-12-05 15:35:59 +0000
commit1bbb5947018b45db17d79d27e3f6e63980f95cc9 (patch)
tree936afa192edd41da88d835e592de28663dd4890b /gcc/cp/cvt.c
parent5d406f8dcfc583022ee2435c9fbc31414da2598b (diff)
downloadgcc-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.c12
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))