@@ -42,10 +42,10 @@ macro_rules! impl_eigh {
4242 assert_eq!( layout. len( ) , layout. lda( ) ) ;
4343 let n = layout. len( ) ;
4444 let jobz = if calc_v { EigenVectorFlag :: Calc } else { EigenVectorFlag :: Not } ;
45- let mut eigs = unsafe { vec_uninit ( n as usize ) } ;
45+ let mut eigs: Vec < MaybeUninit < Self :: Real >> = unsafe { vec_uninit2 ( n as usize ) } ;
4646
4747 $(
48- let mut $rwork_ident: Vec <Self :: Real > = unsafe { vec_uninit ( 3 * n as usize - 2 as usize ) } ;
48+ let mut $rwork_ident: Vec <MaybeUninit < Self :: Real >> = unsafe { vec_uninit2 ( 3 * n as usize - 2 as usize ) } ;
4949 ) *
5050
5151 // calc work size
@@ -69,7 +69,7 @@ macro_rules! impl_eigh {
6969
7070 // actual ev
7171 let lwork = work_size[ 0 ] . to_usize( ) . unwrap( ) ;
72- let mut work: Vec <Self > = unsafe { vec_uninit ( lwork) } ;
72+ let mut work: Vec <MaybeUninit < Self >> = unsafe { vec_uninit2 ( lwork) } ;
7373 let lwork = lwork as i32 ;
7474 unsafe {
7575 $ev(
@@ -86,6 +86,8 @@ macro_rules! impl_eigh {
8686 ) ;
8787 }
8888 info. as_lapack_result( ) ?;
89+
90+ let eigs = unsafe { eigs. assume_init( ) } ;
8991 Ok ( eigs)
9092 }
9193
@@ -99,10 +101,10 @@ macro_rules! impl_eigh {
99101 assert_eq!( layout. len( ) , layout. lda( ) ) ;
100102 let n = layout. len( ) ;
101103 let jobz = if calc_v { EigenVectorFlag :: Calc } else { EigenVectorFlag :: Not } ;
102- let mut eigs = unsafe { vec_uninit ( n as usize ) } ;
104+ let mut eigs: Vec < MaybeUninit < Self :: Real >> = unsafe { vec_uninit2 ( n as usize ) } ;
103105
104106 $(
105- let mut $rwork_ident: Vec <Self :: Real > = unsafe { vec_uninit ( 3 * n as usize - 2 ) } ;
107+ let mut $rwork_ident: Vec <MaybeUninit < Self :: Real >> = unsafe { vec_uninit2 ( 3 * n as usize - 2 ) } ;
106108 ) *
107109
108110 // calc work size
@@ -129,7 +131,7 @@ macro_rules! impl_eigh {
129131
130132 // actual evg
131133 let lwork = work_size[ 0 ] . to_usize( ) . unwrap( ) ;
132- let mut work: Vec <Self > = unsafe { vec_uninit ( lwork) } ;
134+ let mut work: Vec <MaybeUninit < Self >> = unsafe { vec_uninit2 ( lwork) } ;
133135 let lwork = lwork as i32 ;
134136 unsafe {
135137 $evg(
@@ -149,6 +151,7 @@ macro_rules! impl_eigh {
149151 ) ;
150152 }
151153 info. as_lapack_result( ) ?;
154+ let eigs = unsafe { eigs. assume_init( ) } ;
152155 Ok ( eigs)
153156 }
154157 }
0 commit comments