@@ -1334,6 +1334,7 @@ bool Compiler<Emitter>::visitInitList(ArrayRef<const Expr *> Inits,
13341334
13351335 auto initPrimitiveField = [=](const Record::Field *FieldToInit,
13361336 const Expr *Init, PrimType T) -> bool {
1337+ InitStackScope<Emitter> ISS (this , isa<CXXDefaultInitExpr>(Init));
13371338 if (!this ->visit (Init))
13381339 return false ;
13391340
@@ -1344,6 +1345,7 @@ bool Compiler<Emitter>::visitInitList(ArrayRef<const Expr *> Inits,
13441345
13451346 auto initCompositeField = [=](const Record::Field *FieldToInit,
13461347 const Expr *Init) -> bool {
1348+ InitStackScope<Emitter> ISS (this , isa<CXXDefaultInitExpr>(Init));
13471349 InitLinkScope<Emitter> ILS (this , InitLink::Field (FieldToInit->Offset ));
13481350 // Non-primitive case. Get a pointer to the field-to-initialize
13491351 // on the stack and recurse into visitInitializer().
@@ -4088,12 +4090,7 @@ template <class Emitter>
40884090bool Compiler<Emitter>::VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *E) {
40894091 SourceLocScope<Emitter> SLS (this , E);
40904092
4091- bool Old = InitStackActive;
4092- InitStackActive =
4093- !(E->getUsedContext ()->getDeclKind () == Decl::CXXConstructor);
4094- bool Result = this ->delegate (E->getExpr ());
4095- InitStackActive = Old;
4096- return Result;
4093+ return this ->delegate (E->getExpr ());
40974094}
40984095
40994096template <class Emitter >
@@ -4151,6 +4148,9 @@ bool Compiler<Emitter>::VisitCXXThisExpr(const CXXThisExpr *E) {
41514148 // instance pointer of the current function frame, but e.g. to the declaration
41524149 // currently being initialized. Here we emit the necessary instruction(s) for
41534150 // this scenario.
4151+ if (!InitStackActive || !E->isImplicit ())
4152+ return this ->emitThis (E);
4153+
41544154 if (InitStackActive && !InitStack.empty ()) {
41554155 unsigned StartIndex = 0 ;
41564156 for (StartIndex = InitStack.size () - 1 ; StartIndex > 0 ; --StartIndex) {
0 commit comments