NoQ added a comment. Thanks for working on this!
While i probably won't be of much help (no expert in temporaries yet), i notice that this code piece (with `getReferenceInitTemporaryType()`) seems to be duplicated at least three times in this file, with slight variations and FIXMEs. So i guess this needs some care, not necessarily in this patch. ================ Comment at: lib/Analysis/CFG.cpp:3910 @@ +3909,3 @@ + // temporary in an initializer expression. + if (ty.getTypePtr()->isReferenceType()) { + if (const Expr *Init = var->getInit()) { ---------------- Simple `ty->isReferenceType()` should work as well (the overloaded `operator ->()` in `QualType`). ================ Comment at: lib/Analysis/CFG.cpp:3912-3914 @@ +3911,5 @@ + if (const Expr *Init = var->getInit()) { + if (const ExprWithCleanups *EWC = dyn_cast<ExprWithCleanups>(Init)) + Init = EWC->getSubExpr(); + if (isa<MaterializeTemporaryExpr>(Init)) + ty = getReferenceInitTemporaryType(astContext, Init); ---------------- Is this sequence of checks certainly needed? All tests seem to pass without it. Or maybe it's also needed in `addAutomaticObjectDtors()`? Perhaps just nest these checks inside `getReferenceInitTemporaryType()`? https://reviews.llvm.org/D22419 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits