On Fri, Nov 19, 2021 at 8:17 PM Jakub Jelinek via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > On Sat, Nov 20, 2021 at 12:31:19AM +0530, Siddhesh Poyarekar wrote: > > > Neither of these are equivalent to what it used to do before. > > > If some target has e.g. pointers wider than size_t, then previously we > > > could > > > compute bytes that doesn't fit into size_t and would return NULL which > > > eventually would result in object_sizes_execute or > > > expand_builtin_object_size > > > resolving it to the unknown value. But fold_convert will perform modulo > > > arithmetics on it, so say if size_t is 24-bit and bytes is 0x1000001, it > > > will fold to (size_t) 1. I think we should still punt if it doesn't fit. > > > Or do we ensure that what it returns always has sizetype type? > > > > compute_builtin_object_size should always return sizetype. I probably > > haven't strictly ensured that but I could do that. Would it be necessary to > > check for fit in sizetype -> size_type_node conversion too? I've been > > assuming that they'd have the same precision. > > sizetype and size_type_node should be indeed always the same precision.
I don't think so. vms.h has /* Always a 32 bit type. */ #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" ... #define SIZETYPE (flag_vms_pointer_size == VMS_POINTER_SIZE_NONE ? \ "unsigned int" : "long long unsigned int") interestingly that's the _only_ SIZETYPE override we have, so it does look like we might want to try removing the 'SIZETYPE' target macro. I'm not sure the above does anything good - it looks more like a ptr_mode vs Pmode thing. Richard. > Jakub >