aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>1999-09-03 09:01:14 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>1999-09-03 09:01:14 +0000
commita9183fef29a309284c8cb8d83b1511033ee26163 (patch)
tree6aafe1223fb7cfb65da5fa77884c408857957486 /gcc
parent8c5f3e15b070348e7e4ae9151a79419472a19bf4 (diff)
downloadgcc-a9183fef29a309284c8cb8d83b1511033ee26163.zip
gcc-a9183fef29a309284c8cb8d83b1511033ee26163.tar.gz
gcc-a9183fef29a309284c8cb8d83b1511033ee26163.tar.bz2
typeck.c (build_indirect_ref): Reject dereference of pointer to void.
* typeck.c (build_indirect_ref): Reject dereference of pointer to void. From-SVN: r29081
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/typeck.c9
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d439624..c3904bf 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+1999-09-03 Nathan Sidwell <nathan@acm.org>
+
+ * typeck.c (build_indirect_ref): Reject dereference of pointer to
+ void.
+
1999-09-02 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (cp_function): Move here, from decl.c.
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index d187445..b86d82d 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -2460,7 +2460,14 @@ build_indirect_ref (ptr, errorstring)
types. */
tree t = canonical_type_variant (TREE_TYPE (type));
- if (TREE_CODE (pointer) == ADDR_EXPR
+ if (same_type_p (TYPE_MAIN_VARIANT (t), void_type_node))
+ {
+ /* A pointer to incomplete type (other than cv void) can be
+ dereferenced [expr.unary.op]/1 */
+ cp_error ("`%T' is not a pointer-to-object type", type);
+ return error_mark_node;
+ }
+ else if (TREE_CODE (pointer) == ADDR_EXPR
&& !flag_volatile
&& same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0))))
/* The POINTER was something like `&x'. We simplify `*&x' to