diff options
author | Jason Merrill <jason@yorick.cygnus.com> | 1998-10-16 03:37:43 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1998-10-15 23:37:43 -0400 |
commit | 162bc98d096a61193b3cb490a5430fb852d059eb (patch) | |
tree | bf3ac97d2f9df8fd2274f8ac3a2dd6327958d126 /gcc/cp/init.c | |
parent | 94706a5cfc9f995e52279c7594d188d826156f19 (diff) | |
download | gcc-162bc98d096a61193b3cb490a5430fb852d059eb.zip gcc-162bc98d096a61193b3cb490a5430fb852d059eb.tar.gz gcc-162bc98d096a61193b3cb490a5430fb852d059eb.tar.bz2 |
typeck.c (build_indirect_ref): Complain about a pointer to data member, too.
* typeck.c (build_indirect_ref): Complain about a pointer to data
member, too.
* typeck2.c (build_m_component_ref): Don't indirect a pointer to
data member.
* init.c (resolve_offset_ref): Don't undo the above.
* cp-tree.h (DECL_C_BIT_FIELD, SET_DECL_C_BIT_FIELD): New macros.
(struct lang_decl_flags): Add `bitfield'.
* class.c (finish_struct_1): Use DECL_C_BIT_FIELD instead of
DECL_BIT_FIELD.
* decl2.c (grokbitfield, grok_alignof): Likewise.
* init.c (build_offset_ref): Likewise.
* typeck.c (build_component_addr, expr_sizeof): Likewise.
* cvt.c (build_up_reference): Don't crash if taking the address
returns error_mark_node.
From-SVN: r23124
Diffstat (limited to 'gcc/cp/init.c')
-rw-r--r-- | gcc/cp/init.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 2386215..985718c 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1686,7 +1686,7 @@ build_offset_ref (type, name) return convert_from_reference (t); } - if (TREE_CODE (t) == FIELD_DECL && DECL_BIT_FIELD (t)) + if (TREE_CODE (t) == FIELD_DECL && DECL_C_BIT_FIELD (t)) { cp_error ("illegal pointer to bit field `%D'", t); return error_mark_node; @@ -1740,7 +1740,8 @@ resolve_offset_ref (exp) } if ((TREE_CODE (member) == VAR_DECL - && ! TYPE_PTRMEMFUNC_P (TREE_TYPE (member))) + && ! TYPE_PTRMEMFUNC_P (TREE_TYPE (member)) + && ! TYPE_PTRMEM_P (TREE_TYPE (member))) || TREE_CODE (TREE_TYPE (member)) == FUNCTION_TYPE || TREE_CODE (TREE_TYPE (member)) == METHOD_TYPE) { @@ -1824,7 +1825,7 @@ resolve_offset_ref (exp) for the dereferenced pointer-to-member construct. */ addr = build_unary_op (ADDR_EXPR, base, 0); - if (TREE_CODE (TREE_TYPE (member)) == OFFSET_TYPE) + if (TYPE_PTRMEM_P (TREE_TYPE (member))) { if (addr == error_mark_node) { @@ -1832,10 +1833,9 @@ resolve_offset_ref (exp) return error_mark_node; } - basetype = TYPE_OFFSET_BASETYPE (TREE_TYPE (member)); + basetype = TYPE_OFFSET_BASETYPE (TREE_TYPE (TREE_TYPE (member))); addr = convert_pointer_to (basetype, addr); - member = cp_convert (ptrdiff_type_node, - build_unary_op (ADDR_EXPR, member, 0)); + member = cp_convert (ptrdiff_type_node, member); /* Pointer to data members are offset by one, so that a null pointer with a real value of 0 is distinguishable from an |