On Mon, Aug 26, 2013 at 12:15 PM, Marek Polacek <pola...@redhat.com> wrote:
> I noticed I forgot to apply this old patch, already acked by Jason.
> It introduces new pointer_sized_int_node, thus we can get rid of
> uptr_type function in ubsan, and it allows us to do some clean-up
> in asan.c, too.
>
> Tested x86_64-linux, applying to ubsan branch.
>
> 2013-08-26  Marek Polacek  <pola...@redhat.com>
>
>         * tree.h (enum tree_index): Add TI_POINTER_SIZED_TYPE.
>         (pointer_sized_int_node): Define.
>         * tree.c (build_common_tree_nodes): Initialize
>         pointer_sized_int_node.
>         * ubsan.c (ubsan_encode_value): Use pointer_sized_int_node instead
>         calling uptr_type.
>         (uptr_type): Remove function.
>         * asan.c (asan_global_struct): Use pointer_sized_int_node instead
>         calling build_nonstandard_integer_type.
>         (initialize_sanitizer_builtins): Likewise.
>         (asan_finish_file): Likewise.
>
> --- gcc/tree.c.mp       2013-07-21 19:54:35.416986756 +0200
> +++ gcc/tree.c  2013-07-21 19:56:58.347562787 +0200
> @@ -9638,6 +9638,8 @@ build_common_tree_nodes (bool signed_cha
>      = build_pointer_type (build_type_variant (void_type_node, 1, 0));
>    fileptr_type_node = ptr_type_node;
>
> +  pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
> +
>    float_type_node = make_node (REAL_TYPE);
>    TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
>    layout_type (float_type_node);
> --- gcc/ubsan.c.mp      2013-07-21 20:04:59.469653493 +0200
> +++ gcc/ubsan.c 2013-07-21 20:07:00.227178083 +0200
> @@ -123,14 +123,6 @@ ubsan_typedesc_new (tree type, tree decl
>    return desc;
>  }
>
> -/* Build the ubsan uptr type.  */
> -
> -static tree
> -uptr_type (void)
> -{
> -  return build_nonstandard_integer_type (POINTER_SIZE, 1);
> -}
> -
>  /* Helper routine, which encodes a value in the uptr type.
>     Arguments with precision <= POINTER_SIZE are passed directly,
>     the rest is passed by reference.  T is a value we are to encode.  */
> @@ -143,7 +135,7 @@ ubsan_encode_value (tree t)
>      {
>      case INTEGER_TYPE:
>        if (TYPE_PRECISION (type) <= POINTER_SIZE)
> -       return fold_build1 (NOP_EXPR, uptr_type (), t);
> +       return fold_build1 (NOP_EXPR, pointer_sized_int_node, t);
>        else
>         return build_fold_addr_expr (t);
>      case REAL_TYPE:
> @@ -153,7 +145,7 @@ ubsan_encode_value (tree t)
>           {
>             tree itype = build_nonstandard_integer_type (bitsize, true);
>             t = fold_build1 (VIEW_CONVERT_EXPR, itype, t);
> -           return fold_convert (uptr_type (), t);
> +           return fold_convert (pointer_sized_int_node, t);
>           }
>         else
>           {
> --- gcc/tree.h.mp       2013-07-21 19:54:35.441986868 +0200
> +++ gcc/tree.h  2013-07-21 19:56:05.128353854 +0200
> @@ -4227,6 +4227,7 @@ enum tree_index
>    TI_VA_LIST_FPR_COUNTER_FIELD,
>    TI_BOOLEAN_TYPE,
>    TI_FILEPTR_TYPE,
> +  TI_POINTER_SIZED_TYPE,

I'd rather see TI_UINTPTR_TYPE and TI_INTPTR_TYPE (note they might
not be exactly of POINTER_SIZE but larger).

TI_POINTER_SIZED_TYPE is ambiguous, too - what's its signedness?
All around the compiler we use sizetype and ssizetype to munge pointers
(well, not strictly correct as targets may define sizetype to be larger/smaller
than actual pointers).

Richard.

>
>    TI_DFLOAT32_TYPE,
>    TI_DFLOAT64_TYPE,
> @@ -4383,6 +4384,7 @@ extern GTY(()) tree global_trees[TI_MAX]
>  #define va_list_fpr_counter_field      
> global_trees[TI_VA_LIST_FPR_COUNTER_FIELD]
>  /* The C type `FILE *'.  */
>  #define fileptr_type_node              global_trees[TI_FILEPTR_TYPE]
> +#define pointer_sized_int_node         global_trees[TI_POINTER_SIZED_TYPE]
>
>  #define boolean_type_node              global_trees[TI_BOOLEAN_TYPE]
>  #define boolean_false_node             global_trees[TI_BOOLEAN_FALSE]
> --- gcc/asan.c.mp       2013-07-21 20:07:15.013237456 +0200
> +++ gcc/asan.c  2013-07-21 20:16:10.929376734 +0200
> @@ -1954,7 +1954,7 @@ asan_global_struct (void)
>         = build_decl (UNKNOWN_LOCATION, FIELD_DECL,
>                       get_identifier (field_names[i]),
>                       (i == 0 || i == 3) ? const_ptr_type_node
> -                     : build_nonstandard_integer_type (POINTER_SIZE, 1));
> +                     : pointer_sized_int_node);
>        DECL_CONTEXT (fields[i]) = ret;
>        if (i)
>         DECL_CHAIN (fields[i - 1]) = fields[i];
> @@ -2039,8 +2039,7 @@ initialize_sanitizer_builtins (void)
>                                 ptr_type_node, ptr_type_node, NULL_TREE);
>    tree BT_FN_VOID_PTR_PTRMODE
>      = build_function_type_list (void_type_node, ptr_type_node,
> -                               build_nonstandard_integer_type (POINTER_SIZE,
> -                                                               1), 
> NULL_TREE);
> +                               pointer_sized_int_node, NULL_TREE);
>    tree BT_FN_VOID_INT
>      = build_function_type_list (void_type_node, integer_type_node, 
> NULL_TREE);
>    tree BT_FN_BOOL_VPTR_PTR_IX_INT_INT[5];
> @@ -2197,7 +2196,6 @@ asan_finish_file (void)
>    if (gcount)
>      {
>        tree type = asan_global_struct (), var, ctor;
> -      tree uptr = build_nonstandard_integer_type (POINTER_SIZE, 1);
>        tree dtor_statements = NULL_TREE;
>        vec<constructor_elt, va_gc> *v;
>        char buf[20];
> @@ -2226,15 +2224,16 @@ asan_finish_file (void)
>        varpool_assemble_decl (varpool_node_for_decl (var));
>
>        fn = builtin_decl_implicit (BUILT_IN_ASAN_REGISTER_GLOBALS);
> +      tree gcount_tree = build_int_cst (pointer_sized_int_node, gcount);
>        append_to_statement_list (build_call_expr (fn, 2,
>                                                  build_fold_addr_expr (var),
> -                                                build_int_cst (uptr, 
> gcount)),
> +                                                gcount_tree),
>                                 &asan_ctor_statements);
>
>        fn = builtin_decl_implicit (BUILT_IN_ASAN_UNREGISTER_GLOBALS);
>        append_to_statement_list (build_call_expr (fn, 2,
>                                                  build_fold_addr_expr (var),
> -                                                build_int_cst (uptr, 
> gcount)),
> +                                                gcount_tree),
>                                 &dtor_statements);
>        cgraph_build_static_cdtor ('D', dtor_statements,
>                                  MAX_RESERVED_INIT_PRIORITY - 1);
>
>         Marek

Reply via email to