================ Comment at: test/cpp11-migrate/UseAuto/iterator.cpp:67-70 @@ +66,6 @@ + + // declarator-id is not the same type as initializer expression. No transform + // should happen. + std::vector<int>::iterator I2 = myI; + // CHECK: std::vector<int>::iterator I2 = myI; + ---------------- Dmitri Gribenko wrote: > Edwin Vane wrote: > > Dmitri Gribenko wrote: > > > So this transformation was not being done even without this change? > > That's right. The point of that code originally was to get at the > > as-written source of the conversion operator. In this case, the source type > > of the conversion op was not the same as the dest so the change wasn't > > made. Now we abort on any conversion ops, even those whose source type is > > the same as the dest (if that's even possible) because of the side effect > > thing you mentioned. > I think we can drop [the loop] then. This will not break the test, and > conversion operator that converts to itself will not be called implicitly. Just to be clear, you're suggesting something like:
const Expr *E = Construct->arg_begin()->IgnoreParenImpCasts(); const Expr *E2 = E->IgnoreConversionOperator(); if (E2 != E) { return; } That is, shall we abort on a conversion expression or do we just update E with the result of `IgnoreConversionOperator()`? Or are these two options really equivalent since conversion expressions where the source and dest type are the same never happen? http://llvm-reviews.chandlerc.com/D392 _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits