-
Notifications
You must be signed in to change notification settings - Fork 13k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Calling array new with a negative size should be checked in C++14 mode #34921
Comments
This is related to #12016 : we should actually be throwing |
Omitting the bounds check on an non-allocating form of operator [[nodiscard]] void *operator new[](decltype(sizeof 0), void *) noexcept;
extern "C" void abort();
int *f(void *p, int sz) { return new (p) int[sz] {0, (abort(), 1)}; } |
mentioned in issue llvm/llvm-bugzilla-archive#38300 |
This is CWG1061. |
@llvm/issue-subscribers-clang-frontend Author: Tim Northover (TNorthover)
| | |
| --- | --- |
| Bugzilla Link | [35573](https://llvm.org/bz35573) |
| Version | trunk |
| OS | All |
| CC | @hubert-reinterpretcast,@zygoloid |
Extended DescriptionWhen emitting code for a new array expression we check whether the array size is negative in C++98 and C++11 mode, but not from C++14 onwards. E.g. char *foo(int a) {
return new char[a];
} $ clang++ tmp.cpp -std=c++11 -S -o- -emit-llvm -Os define noalias nonnull i8* @<!-- -->_Z3fooi(i32 %a) local_unnamed_addr #<!-- -->0 {
entry:
%0 = sext i32 %a to i64
%1 = icmp sgt i64 %0, -1
%2 = select i1 %1, i64 %0, i64 -1
%call = tail call i8* @<!-- -->_Znam(i64 %2) #<!-- -->2
ret i8* %call
}
$ clang++ tmp.cpp -std=c++14 -S -o- -emit-llvm -Os
define noalias nonnull i8* @<!-- -->_Z3fooi(i32 %a) local_unnamed_addr #<!-- -->0 {
entry:
%conv = sext i32 %a to i64
%call = tail call i8* @<!-- -->_Znam(i64 %conv) #<!-- -->2
ret i8* %call
} |
Extended Description
When emitting code for a new array expression we check whether the array size is negative in C++98 and C++11 mode, but not from C++14 onwards. E.g.
$ clang++ tmp.cpp -std=c++11 -S -o- -emit-llvm -Os
The text was updated successfully, but these errors were encountered: