mirror of
https://github.com/opencv/opencv.git
synced 2025-01-19 06:53:50 +08:00
Merge pull request #21527 from vrabaud:3.4_msan
* Fix wrong MSAN errors. Because Fortran is called in Lapack, MSAN does not think the memory has been written even though it is the case. MSAN does no support well cross-language memory analysis. * Make a dedicated check.
This commit is contained in:
parent
dc35633aa4
commit
b5b52afd35
@ -239,6 +239,21 @@ lapack_SVD(fptype* a, size_t a_step, fptype *w, fptype* u, size_t u_step, fptype
|
||||
else if(typeid(fptype) == typeid(double))
|
||||
OCV_LAPACK_FUNC(dgesdd)(mode, &m, &n, (double*)a, &lda, (double*)w, (double*)u, &ldu, (double*)vt, &ldv, (double*)buffer, &lwork, iworkBuf, info);
|
||||
|
||||
#if defined(__clang__) && defined(__has_feature)
|
||||
#if __has_feature(memory_sanitizer)
|
||||
// Make sure MSAN sees the memory as having been written.
|
||||
// MSAN does not think it has been written because a different language was called.
|
||||
__msan_unpoison(a, a_step * n);
|
||||
__msan_unpoison(buffer, sizeof(fptype) * (lwork + 1));
|
||||
if (u)
|
||||
__msan_unpoison(u, u_step * m);
|
||||
if (vt)
|
||||
__msan_unpoison(vt, v_step * n);
|
||||
if (w)
|
||||
__msan_unpoison(w, sizeof(fptype) * std::min(m, n));
|
||||
#endif // __has_feature(memory_sanitizer)
|
||||
#endif // defined(__clang__) && defined(__has_feature)
|
||||
|
||||
if(!(flags & CV_HAL_SVD_NO_UV))
|
||||
transpose_square_inplace(vt, ldv, n);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user