On Sun, 11 Jan 2026 10:00:32 -0500
[email protected] wrote:

> +#define RTE_PTR_ADD(ptr, x) \
> +     (__extension__ ({ \
> +             /* Diagnostics suppressed for internal macro operations only. \
> +              * Compiler type-checks all _Generic branches even when 
> unselected, \
> +              * triggering warnings with no external impact. */ \
> +             __rte_diagnostic_push \
> +             __rte_diagnostic_ignored_wcast_qual \
> +             _Pragma("GCC diagnostic ignored 
> \"-Wconditional-type-mismatch\"") \
> +             /* Uses uintptr_t arithmetic for integer types (API 
> compatibility), \
> +              * and char* arithmetic for pointer types (enables 
> optimization). */ \
> +             __auto_type _ptr_result = _Generic((ptr), \
> +                     unsigned long long: ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     long long:          ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     unsigned long:      ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     long:               ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     unsigned int:       ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     int:                ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     unsigned short:     ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     short:              ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     unsigned char:      ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     signed char:        ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     char:               ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     _Bool:              ((void *)((uintptr_t)(ptr) + (x))), 
> \
> +                     /* Ternary with null pointer constant: per C11, if one 
> operand \
> +                      * is a null pointer constant and the other is a 
> pointer, the \
> +                      * result type is qualified per the pointer operand, 
> normalizing \
> +                      * const T* to const void* and T* to void*. */ \
> +                     default: _Generic((1 ? (ptr) : (void *)0), \
> +                             const void *: ((void *)((const char *)(ptr) + 
> (x))), \
> +                             default:      ((void *)((char *)(ptr) + (x))) \
> +                     ) \
> +             ); \
> +             __rte_diagnostic_pop \
> +             _ptr_result; \
> +     }))

Good idea in general but the macro is way to big and therefore hard to read.
The comments could be outside the macro.

Any code that adds dependency on a pragma to work is brittle and likely
to allow bugs through. Please figure out how to do it without.

Reply via email to