@@ -39,10 +39,12 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(vector_class<SYCLREF(EL)>, VECTOR(EL))
39
39
*/
40
40
__dpctl_give VECTOR (EL) FN(EL, Create)()
41
41
{
42
+ vector_class<SYCLREF (EL)> *Vec = nullptr ;
42
43
try {
43
- auto Vec = new vector_class<SYCLREF (EL)>();
44
+ Vec = new vector_class<SYCLREF (EL)>();
44
45
return wrap (Vec);
45
46
} catch (std::bad_alloc const &ba) {
47
+ delete Vec;
46
48
return nullptr ;
47
49
}
48
50
}
@@ -56,15 +58,17 @@ __dpctl_give VECTOR(EL) FN(EL, Create)()
56
58
__dpctl_give VECTOR (EL)
57
59
FN(EL, CreateFromArray)(size_t n, __dpctl_keep SYCLREF (EL) * elems)
58
60
{
61
+ vector_class<SYCLREF (EL)> *Vec = nullptr ;
59
62
try {
60
- auto Vec = new vector_class<SYCLREF (EL)>();
63
+ Vec = new vector_class<SYCLREF (EL)>();
61
64
for (size_t i = 0 ; i < n; ++i) {
62
65
auto Ref = unwrap (elems[i]);
63
66
Vec->emplace_back (
64
67
wrap (new std::remove_pointer<decltype (Ref)>::type (*Ref)));
65
68
}
66
69
return wrap (Vec);
67
70
} catch (std::bad_alloc const &ba) {
71
+ delete Vec;
68
72
return nullptr ;
69
73
}
70
74
}
@@ -125,13 +129,20 @@ SYCLREF(EL) FN(EL, GetAt)(__dpctl_keep VECTOR(EL) VRef, size_t index)
125
129
auto Vec = unwrap (VRef);
126
130
SYCLREF (EL) copy = nullptr ;
127
131
if (Vec) {
132
+ SYCLREF (EL) ret;
128
133
try {
129
- auto ret = Vec->at (index);
130
- auto Ref = unwrap (ret);
131
- copy = wrap (new std::remove_pointer<decltype (Ref)>::type (*Ref));
134
+ ret = Vec->at (index);
132
135
} catch (std::out_of_range const &oor) {
133
136
std::cerr << oor.what () << ' \n ' ;
137
+ return nullptr ;
138
+ }
139
+ auto Ref = unwrap (ret);
140
+ std::remove_pointer<decltype (Ref)>::type *elPtr = nullptr ;
141
+ try {
142
+ elPtr = new std::remove_pointer<decltype (Ref)>::type (*Ref);
143
+ copy = wrap (elPtr);
134
144
} catch (std::bad_alloc const &ba) {
145
+ delete elPtr;
135
146
// \todo log error
136
147
std::cerr << ba.what () << ' \n ' ;
137
148
return nullptr ;
0 commit comments