On Wed, Aug 28, 2013 at 1:10 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Wed, Aug 28, 2013 at 12:48:41PM +0200, Richard Biener wrote: >> On Tue, Aug 27, 2013 at 2:56 PM, Marek Polacek <pola...@redhat.com> wrote: >> > On Tue, Aug 27, 2013 at 01:48:29PM +0200, Richard Biener wrote: >> >> > + 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). >> > >> > We already have [u]intptr_type_node -- but only in c-family/, thus >> > ubsan.c/asan.c cannot use those nodes. I can create both >> > TI_SIGNED_POINTER_SIZED_TYPE and TI_UNSIGNED_POINTER_SIZED_TYPE, >> > but we currently need only the latter... >> >> So simply move them to the middle-end. The set of C language types that >> define the target ABI should be constructed and maintained by the middle-end >> (you need it for various builtins anyway) > > That is not easily possible. The thing is, in the C FEs they are created > from the C/C++ type name (for stdint purposes): > if (INTPTR_TYPE) > intptr_type_node = > TREE_TYPE (identifier_global_value (c_get_ident (INTPTR_TYPE))); > if (UINTPTR_TYPE) > uintptr_type_node = > TREE_TYPE (identifier_global_value (c_get_ident (UINTPTR_TYPE))); > and are supposed to match the stdint.h previously used type, because > it is part of ABI etc. (long vs. long long vs. int e.g. when two of these > are the same precision). > So the middle-end uintptr type needs to be something different, while it > ideally should have the same precision, it is not the same language type.
But it's the C ABI type - and we do need the C ABI types from within the middle-end. Joseph, any idea? Richard. > Jakub