On Wed, Feb 19, 2025 at 09:10:11AM -0800, Stephen Hemminger wrote: > On Wed, 19 Feb 2025 08:50:02 -0800 > Andre Muezerie <andre...@linux.microsoft.com> wrote: > > > On Tue, Feb 18, 2025 at 06:12:04PM +0100, Morten Brørup wrote: > > > > From: Andre Muezerie [mailto:andre...@linux.microsoft.com] > > > > Sent: Tuesday, 18 February 2025 17.32 > > > > > > > > There's no MSVC equivalent for compiler extension __builtin_constant_p. > > > > EAL already had __rte_constant which was used as a first attempt to > > > > workaround __builtin_constant_p when using MSVC. However, there are > > > > pieces of code that would benefit from being able to provide a default > > > > value to be used instead of it being always 0 like how it was done by > > > > __rte_constant. > > > > > > > > A new macro is added here allowing such default to be provided by the > > > > caller. > > > > > > NAK to the new macro. > > > > > > Please use the sizeof() hack suggested by Stephen to provide an > > > implementation of __rte_constant(e) for MSVC. > > > Here's a link to an example of the hack: > > > https://news.ycombinator.com/item?id=16720172 > > > > Thanks for the link. I tried to use the hack as suggested but turns out it > > does > > not work with msvc. It results in error C2100: "you cannot dereference an > > operand of type 'void'". > > > > I'm open to further suggestions. > > Maybe contact the MSVC team? there really ought to be way to do this. > The compiler knows what is constant and what is not since it needs this for > static assertions.
I reached out to the MSVC team and they suggested a similar hack using _Generic, which works with msvc. I'll send out an updated series.