aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/cvt.c
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1999-08-07 01:01:54 +0000
committerJason Merrill <jason@gcc.gnu.org>1999-08-06 21:01:54 -0400
commit6ad073329cea8de835c2939dfb40c305f5568b72 (patch)
tree0207ce2b34a5962b32c2886da0b90ccf59340bee /gcc/cp/cvt.c
parent446588abcb3251b1ef52cdab8f7b761354c1f8d6 (diff)
downloadgcc-6ad073329cea8de835c2939dfb40c305f5568b72.zip
gcc-6ad073329cea8de835c2939dfb40c305f5568b72.tar.gz
gcc-6ad073329cea8de835c2939dfb40c305f5568b72.tar.bz2
decl.c (lookup_name_real): Set the complain flag if we're looking for a namespace member.
* decl.c (lookup_name_real): Set the complain flag if we're looking for a namespace member. * lex.c (real_yylex): We can have a number with no digits. * cvt.c (cp_convert_to_pointer): Don't force pmf conversions. * search.c (binfo_from_vbase): New fn. * cp-tree.h: Declare it. * cvt.c (cp_convert_to_pointer): Use it to diagnose conversion from pointer to member of virtual base. * typeck.c (get_delta_difference): Likewise. From-SVN: r28560
Diffstat (limited to 'gcc/cp/cvt.c')
-rw-r--r--gcc/cp/cvt.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index 6766559..72cbcaf 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -1,5 +1,5 @@
/* Language-level data type conversion for GNU C++.
- Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1987-1988, 1992-1999 Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC.
@@ -199,6 +199,13 @@ cp_convert_to_pointer (type, expr)
if (binfo == error_mark_node)
return error_mark_node;
+ if (binfo_from_vbase (binfo))
+ {
+ cp_error ("conversion to `%T' from pointer to member of virtual base `%T'",
+ type, intype);
+ return error_mark_node;
+ }
+
if (TREE_CODE (expr) == PTRMEM_CST)
expr = cplus_expand_constant (expr);
@@ -217,7 +224,7 @@ cp_convert_to_pointer (type, expr)
return rval;
}
else if (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype))
- return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 1);
+ return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0);
else if (TYPE_PTRMEMFUNC_P (intype))
{
cp_error ("cannot convert `%E' from type `%T' to type `%T'",