Index: sys/net/iflib.h =================================================================== --- sys/net/iflib.h +++ sys/net/iflib.h @@ -248,7 +248,7 @@ /* fields necessary for probe */ pci_vendor_info_t *isc_vendor_info; - char *isc_driver_version; + const char *isc_driver_version; /* optional function to transform the read values to match the table*/ void (*isc_parse_devinfo) (uint16_t *device_id, uint16_t *subvendor_id, uint16_t *subdevice_id, uint16_t *rev_id); Index: sys/sys/cdefs.h =================================================================== --- sys/sys/cdefs.h +++ sys/sys/cdefs.h @@ -801,6 +801,23 @@ #define __NULLABILITY_PRAGMA_POP _Pragma("clang diagnostic pop") #endif +/* + * ignore -Wincompatible-pointer-types-discards-qualifiers warnings + * caused by assigning a const pointer to a non-const storage. + * + * Usage: + * __drop_const(storage = val); + */ +#if !defined(__clang__) +#define __drop_const(expr) (expr) +#else +#define __drop_const(expr) \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wincompatible-pointer-types-discards-qualifiers\"") \ + (expr) \ + _Pragma("clang diagnostic push") +#endif + /* * Type Safety Checking * Index: sys/sys/sysctl.h =================================================================== --- sys/sys/sysctl.h +++ sys/sys/sysctl.h @@ -346,7 +346,10 @@ #define SYSCTL_ADD_STRING(ctx, parent, nbr, name, access, arg, len, descr) \ ({ \ - char *__arg = (arg); \ + char *__arg; \ + __builtin_choose_expr(__builtin_constant_p(arg), \ + __drop_const(__arg = (arg)), \ + __arg = (arg)); \ CTASSERT(((access) & CTLTYPE) == 0 || \ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_STRING); \ sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_STRING|(access), \