@@ -2292,26 +2292,54 @@ bool ByteCodeExprGen<Emitter>::VisitCXXScalarValueInitExpr(
2292
2292
if (std::optional<PrimType> T = classify (Ty))
2293
2293
return this ->visitZeroInitializer (*T, Ty, E);
2294
2294
2295
- assert (Ty->isAnyComplexType ());
2296
- if (!Initializing) {
2297
- std::optional<unsigned > LocalIndex = allocateLocal (E, /* IsExtended=*/ false );
2298
- if (!LocalIndex)
2299
- return false ;
2300
- if (!this ->emitGetPtrLocal (*LocalIndex, E))
2301
- return false ;
2295
+ if (const auto *CT = Ty->getAs <ComplexType>()) {
2296
+ if (!Initializing) {
2297
+ std::optional<unsigned > LocalIndex =
2298
+ allocateLocal (E, /* IsExtended=*/ false );
2299
+ if (!LocalIndex)
2300
+ return false ;
2301
+ if (!this ->emitGetPtrLocal (*LocalIndex, E))
2302
+ return false ;
2303
+ }
2304
+
2305
+ // Initialize both fields to 0.
2306
+ QualType ElemQT = CT->getElementType ();
2307
+ PrimType ElemT = classifyPrim (ElemQT);
2308
+
2309
+ for (unsigned I = 0 ; I != 2 ; ++I) {
2310
+ if (!this ->visitZeroInitializer (ElemT, ElemQT, E))
2311
+ return false ;
2312
+ if (!this ->emitInitElem (ElemT, I, E))
2313
+ return false ;
2314
+ }
2315
+ return true ;
2302
2316
}
2303
2317
2304
- // Initialize both fields to 0.
2305
- QualType ElemQT = Ty->getAs <ComplexType>()->getElementType ();
2306
- PrimType ElemT = classifyPrim (ElemQT);
2318
+ if (const auto *VT = Ty->getAs <VectorType>()) {
2319
+ // FIXME: Code duplication with the _Complex case above.
2320
+ if (!Initializing) {
2321
+ std::optional<unsigned > LocalIndex =
2322
+ allocateLocal (E, /* IsExtended=*/ false );
2323
+ if (!LocalIndex)
2324
+ return false ;
2325
+ if (!this ->emitGetPtrLocal (*LocalIndex, E))
2326
+ return false ;
2327
+ }
2307
2328
2308
- for (unsigned I = 0 ; I != 2 ; ++I) {
2309
- if (!this ->visitZeroInitializer (ElemT, ElemQT, E))
2310
- return false ;
2311
- if (!this ->emitInitElem (ElemT, I, E))
2312
- return false ;
2329
+ // Initialize all fields to 0.
2330
+ QualType ElemQT = VT->getElementType ();
2331
+ PrimType ElemT = classifyPrim (ElemQT);
2332
+
2333
+ for (unsigned I = 0 , N = VT->getNumElements (); I != N; ++I) {
2334
+ if (!this ->visitZeroInitializer (ElemT, ElemQT, E))
2335
+ return false ;
2336
+ if (!this ->emitInitElem (ElemT, I, E))
2337
+ return false ;
2338
+ }
2339
+ return true ;
2313
2340
}
2314
- return true ;
2341
+
2342
+ return false ;
2315
2343
}
2316
2344
2317
2345
template <class Emitter >
0 commit comments