Hi,
On 2022-11-25 17:11:51 -0500, Andrew Dunstan wrote:
> On 2022-11-25 Fr 15:38, Andrew Dunstan wrote:
> > Allow building with MSVC and Strawberry perl
> >
> > Strawberry uses __builtin_expect which Visual C doesn't have. For this
> > case define it as a noop. Solution taken from vim sources.
FWIW, to get a newer strawberry perl to work with msvc we need more than
this. At the very least -DNO_THREAD_SAFE_LOCALE, see
https://postgr.es/m/20220130221659.tlyr2lbw3wk22owg%40alap3.anarazel.de
>
> Argh! drongo doesn't seem to like this. I thought I'd tested it.
>
> A little further googling suggests that instead of
>
>
> #define __builtin_expect(expr, val) (expr)
>
>
> we should probably have something like
>
>
> #define __builtin_expect(expr, val) ((expr) == (val))
That doesn't seem right - val isn't something to compare to, it's the expected
return value. This afaict would compute bogus value in a number of scenarios.
Note that perl's own definition is:
#ifdef HAS_BUILTIN_EXPECT
# define EXPECT(expr,val) __builtin_expect(expr,val)
#else
# define EXPECT(expr,val) (expr)
#endif
So we really should be able to get away with
#define __builtin_expect(expr, val) (expr)
I don't see why drongo's problems would go away with
#define __builtin_expect(expr, val) ((expr) == (val))
anyway?
FWIW a meson build with msvc 2019 and strawberry perl 5.32 builds fine with
#define __builtin_expect(expr, val) (expr)
Greetings,
Andres Freund