Add checks for tree.value, tree.minval, and tree.maxval and others

Diego Novillo dnovillo@redhat.com
Fri Mar 26 01:48:00 GMT 2004


On Thu, 2004-03-18 at 16:14, Richard Kenner wrote:

> 	* tree.h (TREE_CHECK2, TREE_CHECK3, TREE_CHECK5): New macros.
> 	(tree_check2_failed, tree_check3_failed, tree_check5_failed): New decl.
> 	(FUNC_OR_METHOD_CHECK, SET_ARRAY_OR_VECTOR_CHECK): New macros.
> 	(REC_OR_UNION_CHECK, NUMERICAL_TYPE_CHECK): Likewise.
> 	(TYPE_VALUES, TYPE_DOMAIN, TYPE_FIELDS, TYPE_METHODS, TYPE_VFIELD):
> 	Protect with proper check.
>
The check for TYPE_DOMAIN seems wrong.  It is not allowing
INTEGER_TYPEs, which, according to doc/c-tree.texi, it should.  This
causes an ICE in tree-ssa inside c-typeck.c:comptypes() where we have

  if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
      && TYPE_DOMAIN (t2) != 0)
    t2 = TYPE_DOMAIN (t2);


OK for mainline after bootstrapping?  It bootstraps on tree-ssa.


Diego.

*** tree.h      2004/03/26 01:15:40     1.1
--- tree.h      2004/03/26 01:19:58
*************** extern void tree_operand_check_failed (i
*** 523,530 ****
  #define FUNC_OR_METHOD_CHECK(T)       TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TY
PE)
  #define PTR_OR_REF_CHECK(T)   TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE)

! #define SET_ARRAY_OR_VECTOR_CHECK(T) \
!   TREE_CHECK3 (T, ARRAY_TYPE, SET_TYPE, VECTOR_TYPE)

  #define REC_OR_UNION_CHECK(T) \
    TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
--- 523,530 ----
  #define FUNC_OR_METHOD_CHECK(T)       TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TY
PE)
  #define PTR_OR_REF_CHECK(T)   TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE)

! #define INTEGER_SET_ARRAY_OR_VECTOR_CHECK(T) \
!   TREE_CHECK4 (T, INTEGER_TYPE, ARRAY_TYPE, SET_TYPE, VECTOR_TYPE)

  #define REC_OR_UNION_CHECK(T) \
    TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
*************** struct tree_block GTY(())
*** 1422,1428 ****
  #define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode)
  #define TYPE_ORIG_SIZE_TYPE(NODE) (INTEGER_TYPE_CHECK (NODE)->type.values)
  #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values)
! #define TYPE_DOMAIN(NODE) (SET_ARRAY_OR_VECTOR_CHECK (NODE)->type.values)
  #define TYPE_FIELDS(NODE) (REC_OR_UNION_CHECK (NODE)->type.values)
  #define TYPE_METHODS(NODE) (REC_OR_UNION_CHECK (NODE)->type.maxval)
  #define TYPE_VFIELD(NODE) (REC_OR_UNION_CHECK (NODE)->type.minval)
--- 1422,1428 ----
  #define TYPE_MODE(NODE) (TYPE_CHECK (NODE)->type.mode)
  #define TYPE_ORIG_SIZE_TYPE(NODE) (INTEGER_TYPE_CHECK (NODE)->type.values)
  #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values)
! #define TYPE_DOMAIN(NODE) (INTEGER_SET_ARRAY_OR_VECTOR_CHECK (NODE)->type.valu
es)
  #define TYPE_FIELDS(NODE) (REC_OR_UNION_CHECK (NODE)->type.values)
  #define TYPE_METHODS(NODE) (REC_OR_UNION_CHECK (NODE)->type.maxval)
  #define TYPE_VFIELD(NODE) (REC_OR_UNION_CHECK (NODE)->type.minval)



More information about the Gcc-patches mailing list