diff --git a/clang/lib/Analysis/UnsafeBufferUsage.cpp b/clang/lib/Analysis/UnsafeBufferUsage.cpp --- a/clang/lib/Analysis/UnsafeBufferUsage.cpp +++ b/clang/lib/Analysis/UnsafeBufferUsage.cpp @@ -1512,8 +1512,8 @@ FixItHint::CreateInsertion( (*EndOfOperand).getLocWithOffset(1), "[0]")}}; } + break; } - [[fallthrough]]; case Strategy::Kind::Iterator: case Strategy::Kind::Array: case Strategy::Kind::Vector: @@ -1541,8 +1541,9 @@ if (EndOfOperand) return FixItList{{FixItHint::CreateInsertion( *EndOfOperand, ".data()")}}; + // FIXME: Points inside a macro expansion. + break; } - [[fallthrough]]; case Strategy::Kind::Wontfix: case Strategy::Kind::Iterator: case Strategy::Kind::Array: diff --git a/clang/test/SemaCXX/warn-unsafe-buffer-usage-test-unreachable.cpp b/clang/test/SemaCXX/warn-unsafe-buffer-usage-test-unreachable.cpp new file mode 100644 --- /dev/null +++ b/clang/test/SemaCXX/warn-unsafe-buffer-usage-test-unreachable.cpp @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage -fsafe-buffer-usage-suggestions -verify %s + +// expected-no-diagnostics + +typedef unsigned __darwin_size_t; +typedef __darwin_size_t size_t; + #define bzero(s, n) __builtin_bzero(s, n) +void __nosan_bzero(void *dst, size_t sz) { bzero(dst, sz); }