diff --git a/src/stdlib_linalg_determinant.fypp b/src/stdlib_linalg_determinant.fypp index 0091d596b..562498e26 100644 --- a/src/stdlib_linalg_determinant.fypp +++ b/src/stdlib_linalg_determinant.fypp @@ -224,7 +224,7 @@ submodule (stdlib_linalg) stdlib_linalg_determinant err0 = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error') end select - if (.not.copy_a) deallocate(amat) + if (copy_a) deallocate(amat) end select diff --git a/test/linalg/test_linalg_determinant.fypp b/test/linalg/test_linalg_determinant.fypp index 6b9310f72..c80d0f7bc 100644 --- a/test/linalg/test_linalg_determinant.fypp +++ b/test/linalg/test_linalg_determinant.fypp @@ -47,6 +47,7 @@ module test_linalg_determinant integer(ilp), parameter :: n = 128_ilp ${rt}$ :: a(n,n),deta + ${rt}$, allocatable :: aalloc(:,:) a = eye(n) @@ -55,8 +56,18 @@ module test_linalg_determinant call check(error,state%ok(),state%print()) if (allocated(error)) return - call check(error, abs(deta-1.0_${rk}$) Test with allocatable matrix + aalloc = eye(n) + deta = det(aalloc,overwrite_a=.false.,err=state) + call check(error,state%ok(),state%print()//' (allocatable a)') + if (allocated(error)) return + call check(error,allocated(aalloc),'a is still allocated') + if (allocated(error)) return + call check(error, abs(deta-1.0_${rk}$)