@@ -5997,6 +5997,23 @@ bool Compiler<Emitter>::checkLiteralType(const Expr *E) {
5997
5997
return this ->emitCheckLiteralType (E->getType ().getTypePtr (), E);
5998
5998
}
5999
5999
6000
+ static bool initNeedsOverridenLoc (const CXXCtorInitializer *Init) {
6001
+ const Expr *InitExpr = Init->getInit ();
6002
+
6003
+ if (!Init->isWritten () && !Init->isInClassMemberInitializer () &&
6004
+ !isa<CXXConstructExpr>(InitExpr))
6005
+ return true ;
6006
+
6007
+ if (const auto *CE = dyn_cast<CXXConstructExpr>(InitExpr)) {
6008
+ const CXXConstructorDecl *Ctor = CE->getConstructor ();
6009
+ if (Ctor->isDefaulted () && Ctor->isCopyOrMoveConstructor () &&
6010
+ Ctor->isTrivial ())
6011
+ return true ;
6012
+ }
6013
+
6014
+ return false ;
6015
+ }
6016
+
6000
6017
template <class Emitter >
6001
6018
bool Compiler<Emitter>::compileConstructor(const CXXConstructorDecl *Ctor) {
6002
6019
assert (!ReturnType);
@@ -6071,10 +6088,7 @@ bool Compiler<Emitter>::compileConstructor(const CXXConstructorDecl *Ctor) {
6071
6088
const Record::Field *F = R->getField (Member);
6072
6089
6073
6090
LocOverrideScope<Emitter> LOS (this , SourceInfo{},
6074
- !Init->isWritten () &&
6075
- !Init->isInClassMemberInitializer () &&
6076
- (!isa<CXXConstructExpr>(InitExpr) ||
6077
- Member->isAnonymousStructOrUnion ()));
6091
+ initNeedsOverridenLoc (Init));
6078
6092
if (!emitFieldInitializer (F, F->Offset , InitExpr, IsUnion))
6079
6093
return false ;
6080
6094
} else if (const Type *Base = Init->getBaseClass ()) {
@@ -6104,10 +6118,7 @@ bool Compiler<Emitter>::compileConstructor(const CXXConstructorDecl *Ctor) {
6104
6118
return false ;
6105
6119
} else if (const IndirectFieldDecl *IFD = Init->getIndirectMember ()) {
6106
6120
LocOverrideScope<Emitter> LOS (this , SourceInfo{},
6107
- !Init->isWritten () &&
6108
- !Init->isInClassMemberInitializer () &&
6109
- !isa<CXXConstructExpr>(InitExpr));
6110
-
6121
+ initNeedsOverridenLoc (Init));
6111
6122
assert (IFD->getChainingSize () >= 2 );
6112
6123
6113
6124
unsigned NestedFieldOffset = 0 ;
0 commit comments