@@ -42,10 +42,10 @@ macro_rules! impl_eigh {
42
42
assert_eq!( layout. len( ) , layout. lda( ) ) ;
43
43
let n = layout. len( ) ;
44
44
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 ) } ;
46
46
47
47
$(
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 ) } ;
49
49
) *
50
50
51
51
// calc work size
@@ -69,7 +69,7 @@ macro_rules! impl_eigh {
69
69
70
70
// actual ev
71
71
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) } ;
73
73
let lwork = lwork as i32 ;
74
74
unsafe {
75
75
$ev(
@@ -86,6 +86,8 @@ macro_rules! impl_eigh {
86
86
) ;
87
87
}
88
88
info. as_lapack_result( ) ?;
89
+
90
+ let eigs = unsafe { eigs. assume_init( ) } ;
89
91
Ok ( eigs)
90
92
}
91
93
@@ -99,10 +101,10 @@ macro_rules! impl_eigh {
99
101
assert_eq!( layout. len( ) , layout. lda( ) ) ;
100
102
let n = layout. len( ) ;
101
103
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 ) } ;
103
105
104
106
$(
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 ) } ;
106
108
) *
107
109
108
110
// calc work size
@@ -129,7 +131,7 @@ macro_rules! impl_eigh {
129
131
130
132
// actual evg
131
133
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) } ;
133
135
let lwork = lwork as i32 ;
134
136
unsafe {
135
137
$evg(
@@ -149,6 +151,7 @@ macro_rules! impl_eigh {
149
151
) ;
150
152
}
151
153
info. as_lapack_result( ) ?;
154
+ let eigs = unsafe { eigs. assume_init( ) } ;
152
155
Ok ( eigs)
153
156
}
154
157
}
0 commit comments