@@ -39,10 +39,12 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(vector_class<SYCLREF(EL)>, VECTOR(EL))
3939 */
4040__dpctl_give VECTOR (EL) FN(EL, Create)()
4141{
42+ vector_class<SYCLREF (EL)> *Vec = nullptr ;
4243 try {
43- auto Vec = new vector_class<SYCLREF (EL)>();
44+ Vec = new vector_class<SYCLREF (EL)>();
4445 return wrap (Vec);
4546 } catch (std::bad_alloc const &ba) {
47+ delete Vec;
4648 return nullptr ;
4749 }
4850}
@@ -56,15 +58,17 @@ __dpctl_give VECTOR(EL) FN(EL, Create)()
5658__dpctl_give VECTOR (EL)
5759 FN(EL, CreateFromArray)(size_t n, __dpctl_keep SYCLREF (EL) * elems)
5860{
61+ vector_class<SYCLREF (EL)> *Vec = nullptr ;
5962 try {
60- auto Vec = new vector_class<SYCLREF (EL)>();
63+ Vec = new vector_class<SYCLREF (EL)>();
6164 for (size_t i = 0 ; i < n; ++i) {
6265 auto Ref = unwrap (elems[i]);
6366 Vec->emplace_back (
6467 wrap (new std::remove_pointer<decltype (Ref)>::type (*Ref)));
6568 }
6669 return wrap (Vec);
6770 } catch (std::bad_alloc const &ba) {
71+ delete Vec;
6872 return nullptr ;
6973 }
7074}
@@ -125,13 +129,20 @@ SYCLREF(EL) FN(EL, GetAt)(__dpctl_keep VECTOR(EL) VRef, size_t index)
125129 auto Vec = unwrap (VRef);
126130 SYCLREF (EL) copy = nullptr ;
127131 if (Vec) {
132+ SYCLREF (EL) ret;
128133 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);
132135 } catch (std::out_of_range const &oor) {
133136 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);
134144 } catch (std::bad_alloc const &ba) {
145+ delete elPtr;
135146 // \todo log error
136147 std::cerr << ba.what () << ' \n ' ;
137148 return nullptr ;
0 commit comments