On 3/29/19 1:54 PM, Brian Paul wrote: > On 03/29/2019 12:58 PM, Ian Romanick wrote: >> On 3/29/19 9:57 AM, Brian Paul wrote: >>> __builtin_types_compatible_p() is GCC-specific and breaks the >>> MSVC build. >>> >>> This intrinsic has been in u_vector_foreach() for a long time, but >>> that macro has only recently been used in code >>> (nir/nir_opt_comparison_pre.c) that's built with MSVC. >>> >>> Fixes: 2cf59861a ("nir: Add partial redundancy elimination for >>> compares") >>> --- >>> src/util/u_vector.h | 4 ++++ >>> 1 file changed, 4 insertions(+) >>> >>> diff --git a/src/util/u_vector.h b/src/util/u_vector.h >>> index cd8a95d..6807748 100644 >>> --- a/src/util/u_vector.h >>> +++ b/src/util/u_vector.h >>> @@ -80,6 +80,10 @@ u_vector_finish(struct u_vector *queue) >>> free(queue->data); >>> } >>> +#ifndef __GNUC__ >>> +#define __builtin_types_compatible_p(x) 1 >>> +#endif >>> + >>> #define u_vector_foreach(elem, >>> queue) \ >>> STATIC_ASSERT(__builtin_types_compatible_p(__typeof__(queue), >>> struct u_vector *)); \ >> >> The way this is GCC builtin is used here, this should be fine. However, >> in case it's begin used elsewhere, we should #undef it afterwards. > > That doesn't seem to work. When u_vector_foreach() is instantiated > later, __builtin_types_compatible_p is undefined and we error out.
Ah, right. u_vector_foreach is itself a macro, so the __builtin_type_compatible_p macro isn't evaluated until u_vector_foreach is evaluated. By that point __builtin_type_compatible_p would be undefined. This should be fine as-is, then. Hopefully this won't result in a weird, hard to debug compile failure later on. Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> > -Brian > > > I'd >> hate to mask some other kind of bug that may be introduced later. >> >>> for (uint32_t __u_vector_offset = >>> (queue)->tail; \ >>> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev