diff --git a/modules/core/test/test_dxt.cpp b/modules/core/test/test_dxt.cpp index 2aaabbf0f8..1b2995a541 100644 --- a/modules/core/test/test_dxt.cpp +++ b/modules/core/test/test_dxt.cpp @@ -419,9 +419,6 @@ static void fixCCS( Mat& mat, int cols, int flags ) } } -#if defined _MSC_VER && _MSC_VER >= 1700 -#pragma optimize("", off) -#endif static void mulComplex( const Mat& src1, const Mat& src2, Mat& dst, int flags ) { dst.create(src1.rows, src1.cols, src1.type()); @@ -430,12 +427,27 @@ static void mulComplex( const Mat& src1, const Mat& src2, Mat& dst, int flags ) CV_Assert( src1.size == src2.size && src1.type() == src2.type() && (src1.type() == CV_32FC2 || src1.type() == CV_64FC2) ); + const Mat* src1_ = &src1; + Mat src1_tmp; + if (dst.data == src1.data) + { + src1_tmp = src1.clone(); + src1_ = &src1_tmp; + } + const Mat* src2_ = &src2; + Mat src2_tmp; + if (dst.data == src2.data) + { + src2_tmp = src2.clone(); + src2_ = &src2_tmp; + } + for( i = 0; i < dst.rows; i++ ) { if( depth == CV_32F ) { - const float* a = src1.ptr(i); - const float* b = src2.ptr(i); + const float* a = src1_->ptr(i); + const float* b = src2_->ptr(i); float* c = dst.ptr(i); if( !(flags & CV_DXT_MUL_CONJ) ) @@ -459,8 +471,8 @@ static void mulComplex( const Mat& src1, const Mat& src2, Mat& dst, int flags ) } else { - const double* a = src1.ptr(i); - const double* b = src2.ptr(i); + const double* a = src1_->ptr(i); + const double* b = src2_->ptr(i); double* c = dst.ptr(i); if( !(flags & CV_DXT_MUL_CONJ) ) @@ -484,9 +496,6 @@ static void mulComplex( const Mat& src1, const Mat& src2, Mat& dst, int flags ) } } } -#if defined _MSC_VER && _MSC_VER >= 1700 -#pragma optimize("", on) -#endif }