[clang] [Clang][Sema] placement new initializes typedef array with correct size (PR #83124)
Jorge Gorbe Moya via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 17 14:07:51 PDT 2024
slackito wrote:
The following program fails to build after this change:
```
#include <cstdint>
#include <memory>
template<typename T>
struct X {
void f() {
values_.reset(new int64_t[123][65]);
}
std::unique_ptr<int64_t[][65]> values_;
};
int main() {
X<unsigned char> x;
x.f();
}
```
you get similar errors with both libstdc++:
```
jgorbe at gorbe:~/llvm-build/bin$ ./clang++ -o /dev/null ~/repro.cc
/usr/local/google/home/jgorbe/repro.cc:7:13: error: no matching member function for call to 'reset'
7 | values_.reset(new int64_t[123][65]);
| ~~~~~~~~^~~~~
/usr/local/google/home/jgorbe/repro.cc:15:5: note: in instantiation of member function 'X<unsigned char>::f' requested here
15 | x.f();
| ^
/usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/unique_ptr.h:779:7: note: candidate template ignored: requirement '__and_<std::__or_<std::is_same<long *, long (*)[65]>, std::__and_<std::is_same<long (*)[65], long (*)[65]>, std::is_pointer<long *>, std::is_convertible<long (*)[], long (*)[][65]>>>>::value' was not satisfied [with _Up = int64_t *]
779 | reset(_Up __p) noexcept
| ^
1 error generated.
```
and libc++
```
jgorbe at gorbe:~/llvm-build/bin$ ./clang++ -o /dev/null ~/repro.cc -stdlib=libc++
/usr/local/google/home/jgorbe/repro.cc:7:13: error: no matching member function for call to 'reset'
7 | values_.reset(new int64_t[123][65]);
| ~~~~~~~~^~~~~
/usr/local/google/home/jgorbe/repro.cc:15:5: note: in instantiation of member function 'X<unsigned char>::f' requested here
15 | x.f();
| ^
/usr/local/google/home/jgorbe/llvm-build/bin/../include/c++/v1/__memory/unique_ptr.h:457:60: note: candidate template ignored: requirement '_CheckArrayPointerConversion<long *>::value' was not satisfied [with _Pp = int64_t *]
457 | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 void reset(_Pp __p) _NOEXCEPT {
| ^
1 error generated.
```
https://github.com/llvm/llvm-project/pull/83124
More information about the cfe-commits
mailing list