Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5
# c60b055d 27-Nov-2024 Zequan Wu <zequanwu@google.com>

Reapply "Respect the [[clang::unsafe_buffer_usage]] attribute for field and constructor initializers (#91991)"

It was originally reverted due to an [existing bug](https://github.com/llvm/llvm-projec

Reapply "Respect the [[clang::unsafe_buffer_usage]] attribute for field and constructor initializers (#91991)"

It was originally reverted due to an [existing bug](https://github.com/llvm/llvm-project/issues/116286). Relanding it as the bug was fixed by https://github.com/llvm/llvm-project/pull/116433.

show more ...


Revision tags: llvmorg-19.1.4
# b05d37d0 14-Nov-2024 Zequan Wu <zequanwu@google.com>

Revert "Respect the [[clang::unsafe_buffer_usage]] attribute for field and constructor initializers (#91991)"

This reverts commit a518ed2d815c16010a6262edd0414a5f60a63a39 because it causes regressio

Revert "Respect the [[clang::unsafe_buffer_usage]] attribute for field and constructor initializers (#91991)"

This reverts commit a518ed2d815c16010a6262edd0414a5f60a63a39 because it causes regression. See https://github.com/llvm/llvm-project/pull/91991#issuecomment-2477456171 for detail.

show more ...


# 0dcb0acf 13-Nov-2024 Malavika Samak <malavika.samak@gmail.com>

[-Wunsafe-buffer-usage] Fix false positives in warning againt 2-parameter std::span constructor (#115797)

Do not warn when two parameter constructor receives pointer address from
a std::addressof m

[-Wunsafe-buffer-usage] Fix false positives in warning againt 2-parameter std::span constructor (#115797)

Do not warn when two parameter constructor receives pointer address from
a std::addressof method and the span size is set to 1.

(rdar://139298119)

Co-authored-by: MalavikaSamak <malavika2@apple.com>

show more ...


# a518ed2d 30-Oct-2024 Dana Jansens <danakj@chromium.org>

Respect the [[clang::unsafe_buffer_usage]] attribute for field and constructor initializers (#91991)

CXXCtorInitializers are not statements , but they point to an
initializer expression which is. W

Respect the [[clang::unsafe_buffer_usage]] attribute for field and constructor initializers (#91991)

CXXCtorInitializers are not statements , but they point to an
initializer expression which is. When visiting a FunctionDecl, also
walk through any constructor initializers and run the warning
checks/matchers against their initializer expressions. This catches
warnings for initializing fields and calling other constructors, such
as:

struct C {
C(P* Ptr) : AnUnsafeCtor(Ptr) {}
}

Field initializers can be found by traversing CXXDefaultInitExprs. This
catches warnings in places such as:

struct C {
P* Ptr;
AnUnsafeCtor U{Ptr};
};

We add tests for explicit construction, for field initialization, base
class constructor calls, delegated constructor calls, and aggregate
initialization.

Note that aggregate initialization is not fully covered where a field
specifies an initializer and it's not overridden in the aggregate initialization,
such as in:

struct AggregateViaValueInit {
UnsafeMembers f1;
// FIXME: A construction of this class does initialize the field
// through this initializer, so it should warn. Ideally it should
// also point to where the site of the construction is in
// testAggregateViaValueInit().
UnsafeMembers f2{3};
};

void testAggregateViaValueInit() {
auto A = AggregateViaValueInit();
};

There are 3 tests for different types of aggregate initialization with
FIXMEs documenting this future work.

One attempt to fix this involved returning true from
MatchDescendantVisitor::shouldVisitImplicitCode(), however, it breaks expectations
for field in-class initializers by moving the SourceLocation, possibly
to inside the implicit ctor instead of on the line where the field
initialization happens.

struct C {
P* Ptr;
AnUnsafeCtor U{Ptr}; // expected-warning{{this is never seen then}}
};

Tests are also added for std::span(ptr, size) constructor being called
from a field initializer and a constructor initializer.

Issue #80482

show more ...


Revision tags: llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3
# 9aa3b53a 15-Aug-2024 Ziqing Luo <ziqing@udel.edu>

[-Wunsafe-buffer-usage] Fix a small bug recently found (#102953)

`QualType::isConstantArrayType()` checks canonical type. So a following
cast should be applied to canonical type as well:

```
if

[-Wunsafe-buffer-usage] Fix a small bug recently found (#102953)

`QualType::isConstantArrayType()` checks canonical type. So a following
cast should be applied to canonical type as well:

```
if (Ty->isConstantArrayType())
cast<ConstantArrayType>(Ty.getCanonicalType()); // cast<ConstantArrayType>(Ty) is incorrect
```

show more ...


Revision tags: llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1
# 9816863d 26-Jan-2024 Ziqing Luo <ziqing@udel.edu>

[-Wunsafe-buffer-usage] Add a new warning for uses of std::span two-parameter constructors (#77148)

Constructing `std::span` objects with the two parameter constructors
could introduce mismatched b

[-Wunsafe-buffer-usage] Add a new warning for uses of std::span two-parameter constructors (#77148)

Constructing `std::span` objects with the two parameter constructors
could introduce mismatched bounds information, which defeats the
purpose of using `std::span`. Therefore, we warn every use of such
constructors.

rdar://115817781

show more ...