Opened 5 years ago

Closed 5 years ago

Last modified 2 months ago

#60252 closed defect (fixed)

zeek: error: aligned allocation function of type 'void *(std::size_t, std::align_val_t)' is only available on macOS 10.14 or newer

Reported by: ryandesign (Ryan Carsten Schmidt) Owned by: Schamschula (Marius Schamschula)
Priority: Normal Milestone:
Component: ports Version:
Keywords: Cc:
Port: zeek

Description

I guess this will only work on extremely new systems:

https://build.macports.org/builders/ports-10.11_x86_64-builder/builds/111036/steps/install-port/logs/stdio

/opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_net_zeek/zeek/work/zeek-3.1.1/aux/broker/bindings/python/3rdparty/pybind11/include/pybind11/cast.h:579:34: error: aligned allocation function of type 'void *(std::size_t, std::align_val_t)' is only available on macOS 10.14 or newer
                        vptr = ::operator new(type->type_size,
                                 ^
/opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_net_zeek/zeek/work/zeek-3.1.1/aux/broker/bindings/python/3rdparty/pybind11/include/pybind11/cast.h:579:34: note: if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic
In file included from /opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_net_zeek/zeek/work/zeek-3.1.1/aux/broker/bindings/python/_broker.cpp:13:
In file included from /opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_net_zeek/zeek/work/zeek-3.1.1/aux/broker/bindings/python/3rdparty/pybind11/include/pybind11/functional.h:12:
/opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_net_zeek/zeek/work/zeek-3.1.1/aux/broker/bindings/python/3rdparty/pybind11/include/pybind11/pybind11.h:1008:11: error: 'operator delete' is unavailable: introduced in macOS 10.12
        ::operator delete(p, s, std::align_val_t(a));
          ^
/opt/local/libexec/llvm-9.0/bin/../include/c++/v1/new:208:74: note: 'operator delete' has been explicitly marked unavailable here
_LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_AVAILABILITY_SIZED_NEW_DELETE void  operator delete(void* __p, std::size_t __sz, std::align_val_t) _NOEXCEPT;
                                                                         ^
In file included from /opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_net_zeek/zeek/work/zeek-3.1.1/aux/broker/bindings/python/_broker.cpp:13:
In file included from /opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_net_zeek/zeek/work/zeek-3.1.1/aux/broker/bindings/python/3rdparty/pybind11/include/pybind11/functional.h:12:
/opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_net_zeek/zeek/work/zeek-3.1.1/aux/broker/bindings/python/3rdparty/pybind11/include/pybind11/pybind11.h:1010:11: error: 'operator delete' is unavailable: introduced in macOS 10.12
        ::operator delete(p, s);
          ^
/opt/local/libexec/llvm-9.0/bin/../include/c++/v1/new:191:74: note: 'operator delete' has been explicitly marked unavailable here
_LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_AVAILABILITY_SIZED_NEW_DELETE void  operator delete(void* __p, std::size_t __sz) _NOEXCEPT;
                                                                         ^

Change History (5)

comment:1 Changed 5 years ago by Schamschula (Marius Schamschula)

OK. Sounds like we'll have to limit week to new OS versions.

comment:2 Changed 5 years ago by kencu (Ken)

This is a bit interesting, actually. On 10.6.8, where we currently use libc++ from llvm 5.0, libcxx has capability far beyond what was installed on MacOSX 10.7.

Apple has not enabled any testing for the libc++ version installed; instead, it assumes that certain OS versions have certain versions of libc++. This is mostly true, of course.

However, if we ever do start upgrading libc++ on these older 10.7 to 10.12 systems, which we could do, then we would want to disable this system version testing.

There is a simple toggle to disable it in a clang header called _config, and I have disabled that OS version testing on my older systems to not artificially limit them, when the libc++ version often has all these capabilities.

Last edited 5 years ago by kencu (Ken) (previous) (diff)

comment:3 Changed 5 years ago by kencu (Ken)

Ah -- it turns out they made this one more complicated, and the libc++ toggle doesn't work with this alignment operator.

They have this hardcoded into the clang driver, and can be overridden by passing a flag saying that you know you have an aligned allocator, and you want to override it.

So -- not for older systems without surgery.

comment:4 Changed 5 years ago by Schamschula (Marius Schamschula)

Resolution: fixed
Status: assignedclosed
Last edited 5 years ago by ryandesign (Ryan Carsten Schmidt) (previous) (diff)

comment:5 in reply to:  3 Changed 2 months ago by barracuda156

Replying to kencu:

Ah -- it turns out they made this one more complicated, and the libc++ toggle doesn't work with this alignment operator.

They have this hardcoded into the clang driver, and can be overridden by passing a flag saying that you know you have an aligned allocator, and you want to override it.

So -- not for older systems without surgery.

It also pulls in a lot of third-party stuff which has to be fixed for this to build.

Note: See TracTickets for help on using tickets.