Skip to contentSkip to conversation

enable_stdatomic=true breaks C++ on GCC 11 and earlier

DPDK/core Bug 1425 [email protected] 3 participants 4 messages Apr 29, 2024 – Apr 30, 2024

lore
Share & tools
lore
#0 lore raw

https://bugs.dpdk.org/show_bug.cgi?id=1425

            Bug ID: 1425
           Summary: enable_stdatomic=true breaks C++  on GCC 11 and
                    earlier
           Product: DPDK
           Version: 23.11
          Hardware: All
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: core
          Assignee: [email protected]
          Reporter: [email protected]

Target Milestone: ---

On GCC 11 and earlier, configuring enable_stdatomic=true prevents the use of all DPDK header files that directly or indirectly include <rte_stdatomic.h> from a C++ translation unit (e.g., app).

<rte_stdatomic.h> includes <stdatomic.h>, which in turn is not necessarily C++-compatible.

Signature · 2 lines
You are receiving this mail because:
You are the assignee for the bug.
#1 lore raw
Quoted 15 lines · On Mon, Apr 29, 2024 at 06:21:13AM +0000, [email protected] wrote:

https://bugs.dpdk.org/show_bug.cgi?id=1425

            Bug ID: 1425
           Summary: enable_stdatomic=true breaks C++  on GCC 11 and
                    earlier
           Product: DPDK
           Version: 23.11
          Hardware: All
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: core
          Assignee: [email protected]
          Reporter: [email protected]
Quoted 8 lines

Target Milestone: ---

On GCC 11 and earlier, configuring enable_stdatomic=true prevents the use of all DPDK header files that directly or indirectly include <rte_stdatomic.h> from a C++ translation unit (e.g., app).

<rte_stdatomic.h> includes <stdatomic.h>, which in turn is not necessarily C++-compatible.

This is known but to add some information.

C++ and enable_stdatomic=true for llvm and gcc are not currently supported. the combination will remain unsupported for C++ compilers that do not support -std=c++23 which is the first C++ standard that requires interoperability with C11 stdatomic.h

When enable_stdatomic=true there are bugs/incorrect usages of atomic qualifier in casts that (even when using C++23) cause compilation failure. These are a fixable but are low priority without -std=c++23.

Finally, the legacy atomics remain unconverted to stdatomic. This will cause enable_stdatomic=true not to build when using llvm (but not gcc) because llvm strictly enforces qualification when using atomic generics.

Quoted 4 lines
Signature · 3 lines
-- 
You are receiving this mail because:
You are the assignee for the bug.
#2 lore raw
Quoted 18 lines · Tyler Retzlaff
Quoted 17 lines · On Mon, Apr 29, 2024 at 06:21:13AM +0000, [email protected] wrote:

https://bugs.dpdk.org/show_bug.cgi?id=1425

             Bug ID: 1425
            Summary: enable_stdatomic=true breaks C++  on GCC 11 and
                     earlier
            Product: DPDK
            Version: 23.11
           Hardware: All
                 OS: Linux
             Status: UNCONFIRMED
           Severity: normal
           Priority: Normal
          Component: core
           Assignee: [email protected]
           Reporter: [email protected]

Target Milestone: ---

Quoted 9 lines
Quoted 6 lines

On GCC 11 and earlier, configuring enable_stdatomic=true prevents the use of all DPDK header files that directly or indirectly include <rte_stdatomic.h> from a C++ translation unit (e.g., app).

<rte_stdatomic.h> includes <stdatomic.h>, which in turn is not necessarily C++-compatible.

This is known but to add some information.

Is it also documented?

Quoted 8 lines

C++ and enable_stdatomic=true for llvm and gcc are not currently supported. the combination will remain unsupported for C++ compilers that do not support -std=c++23 which is the first C++ standard that requires interoperability with C11 stdatomic.h >
When enable_stdatomic=true there are bugs/incorrect usages of atomic qualifier in casts that (even when using C++23) cause compilation failure. These are a fixable but are low priority without -std=c++23.

Quoted 4 lines

Finally, the legacy atomics remain unconverted to stdatomic. This will cause enable_stdatomic=true not to build when using llvm (but not gcc) because llvm strictly enforces qualification when using atomic generics.

OK, I see. It'll be a while until enable_stdatomic is usable outside Windows then, for generic builds.

Am I right if I say that C++23-capable compilers/run-times are supposed to have a <stdatomic.h> which interoperates with C++ even in C++11-mode? Or need the application be compiled as C++23.

Quoted 4 lines
Quoted 4 lines
Signature · 3 lines
-- 
You are receiving this mail because:
You are the assignee for the bug.
#3 lore raw
Quoted 23 lines · Mattias Rönnblom
Quoted 22 lines · Tyler Retzlaff
Quoted 21 lines · On Mon, Apr 29, 2024 at 06:21:13AM +0000, [email protected] wrote:

https://bugs.dpdk.org/show_bug.cgi?id=1425

            Bug ID: 1425
           Summary: enable_stdatomic=true breaks C++  on GCC 11 and
                    earlier
           Product: DPDK
           Version: 23.11
          Hardware: All
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: core
          Assignee: [email protected]
          Reporter: [email protected]

Target Milestone: ---

On GCC 11 and earlier, configuring enable_stdatomic=true prevents the use of all DPDK header files that directly or indirectly include <rte_stdatomic.h> from a C++ translation unit (e.g., app).

Quoted 7 lines
Quoted 5 lines
Quoted 2 lines

<rte_stdatomic.h> includes <stdatomic.h>, which in turn is not necessarily C++-compatible.

This is known but to add some information.

Is it also documented?

we don't document anything about C++ right now including minimum compiler requirements or -std. i agree we probably should, if i find cycles i'll see if i can provide some text.

Quoted 14 lines
Quoted 9 lines

C++ and enable_stdatomic=true for llvm and gcc are not currently supported. the combination will remain unsupported for C++ compilers that do not support -std=c++23 which is the first C++ standard that requires interoperability with C11 stdatomic.h >
When enable_stdatomic=true there are bugs/incorrect usages of atomic qualifier in casts that (even when using C++23) cause compilation failure. These are a fixable but are low priority without -std=c++23.

Quoted 4 lines

Finally, the legacy atomics remain unconverted to stdatomic. This will cause enable_stdatomic=true not to build when using llvm (but not gcc) because llvm strictly enforces qualification when using atomic generics.

Quoted 6 lines

OK, I see. It'll be a while until enable_stdatomic is usable outside Windows then, for generic builds.

Am I right if I say that C++23-capable compilers/run-times are supposed to have a <stdatomic.h> which interoperates with C++ even in C++11-mode? Or need the application be compiled as C++23.

the application will need to be compiled with -std=C++23 though i think llvm does have a stdatomic.h that may work with lower -std, gcc does not last i checked. in general i think (as you found with _Generic) the compiler vendors are limiting leaking of C into C++ and vice versa where it is not explicitly intended to operate in one language or the other.

i'll be looking into this more beyond 24.07 since there is work to do even consuming with msvc that is not upstream.

Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Signature · 3 lines
-- 
You are receiving this mail because:
You are the assignee for the bug.