arduino / toolchain-avr

The AVR toolchain used by the Arduino IDE
142 stars 48 forks source link

C11 `_Atomic` and C++11 `std::atomic<>` types not supported--will they ever be? (Arduino needs to update their version of avr-gcc?) #92

Open ElectricRCAircraftGuy opened 1 year ago

ElectricRCAircraftGuy commented 1 year ago

See my answer here, under the section "Why not just use the atomic_* types offered by C11 and C++11 or later?". See my comments under that answer and under this answer too.

Will the 8-bit AVRs ever support this?

Currently my work-around is the decades-old one described in my "Full example usage: how to efficiently, atomically, read shared volatile variables" here.

See also my comment:

Note: arduino-1.8.13/hardware/tools/avr/bin/avr-g++ --version shows avr-g++ (GCC) 7.3.0. I just installed the latest Arduino 2.1.0 and got the same error too. Checking its g++ version, I see it is the same: ~/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ --version --> output: avr-g++ (GCC) 7.3.0

Godbolt seems to think the latest AVR gcc version is 13.1.0: https://godbolt.org/z/z1a386vc1

matthijskooijman commented 1 year ago

Will the 8-bit AVRs ever support this?

For that, I think avr-gcc should be compiled with libstdc++, see #89 for that. I'm not sure if libstdc++ on AVR already has support for atomic, though, since AFAIK nobody (at least not Arduino and I think also not atmel) builds libstdc++ for AVR, so it probably has some bitrot and lack of testing / demand, but I've seen some reports of people compiling it succesfully (see #89 for links).

Godbolt seems to think the latest AVR gcc version is 13.1.0: https://godbolt.org/z/z1a386vc1

I guess the latest gcc can just be compiled for avr, but the arduino version applies patches from atmel, which were often very much behind (I haven't checked current status, though).