microsoft / GSL

Guidelines Support Library

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Turning off clang unsafe buffer warnings fails when compiling with a gcc based compiler

pirgia opened this issue · comments

The code sections (in span and util)

// Turn off clang unsafe buffer warnings as all accessed are guarded by runtime checks
#if defined(__clang__) && __has_warning("-Wunsafe-buffer-usage")
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
#endif // defined(__clang__) && __has_warning("-Wunsafe-buffer-usage")

and (similarly)

#if defined(__clang__) && __has_warning("-Wunsafe-buffer-usage")
#pragma clang diagnostic pop
#endif

fails when compiling with a GCC-based compiler (the STM compiler for an STM32 microcontroller in this case).
The generated error is:

missing binary operator before token "("

I solved this by separating the checks:

// Turn off clang unsafe buffer warnings as all accessed are guarded by runtime checks
#if defined(__clang__)
#  if __has_warning("-Wunsafe-buffer-usage")
#    pragma clang diagnostic push
#    pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
#  endif // __has_warning("-Wunsafe-buffer-usage")
#endif // defined(__clang__)

There are 4 points that need to be modified:

  • span: lines 67 and 855
  • util: lines 45 and 163

Thanks for your attention

I am having the same issue, it even shows up now in godbolt:

https://godbolt.org/z/cEb1481Yd

The last commit that works for me with gcc is caae4dd.

I also can confirm that the pull request from @beinhaerter fixes the issue for me

Confirmed to be working for me as well.

commented

It also shows errors from IntelliSense under VS2022 for this:

image