typeck.c (build_indirect_ref): Reject dereference of pointer to void.
authorNathan Sidwell <nathan@acm.org>
Fri, 3 Sep 1999 09:01:14 +0000 (09:01 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 3 Sep 1999 09:01:14 +0000 (09:01 +0000)
* typeck.c (build_indirect_ref): Reject dereference of pointer to
void.

From-SVN: r29081

gcc/cp/ChangeLog
gcc/cp/typeck.c

index d4396244164f7c06c6ea86bea88923fa151ebfb5..c3904bffea8ba37e0ff2bd97183d3bed5ca3d85b 100644 (file)
@@ -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.
index d18744535b739f8c5658cededb803d0f9754d916..b86d82db3b799477d178a88f1d21aa2f3d45443d 100644 (file)
@@ -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