[PATCH] D22208: [clang-tidy] Fixes to modernize-use-emplace

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 2 03:30:40 PDT 2016

alexfh added inline comments.

Comment at: clang-tidy/modernize/UseEmplaceCheck.cpp:115
@@ -95,1 +114,3 @@
+  auto CtorCallSourceRange = CharSourceRange::getTokenRange(
+      InnerCtorCall->getExprLoc(), CallParensRange.getBegin());
Prazek wrote:
> alexfh wrote:
> > Prazek wrote:
> > > alexfh wrote:
> > > > This doesn't seem to be an issue, since expression `v.push_back(obj.member())` won't trigger this check: it expects that the argument of the `push_back` call is a `cxxConstructExpr` or a `cxxFunctionalCastExpr`.
> > > what about the implicit conversion? What if obj.member would return object that is different from the one that v stores, but it is convertible to it?
> > Sounds almost like a recipe for a test case ;) Have you tried to construct it this way?
> Yes, I think I emulated this case in line 190. I tried to hit this problem but could not find the test case.
>> if The Call->getArg(0) will be a memberExpr (call to member function)
> what about the implicit conversion?

I think, I know what happens in this case. When an implicit conversion happens in `v.push_back(obj.member())`, then `Call->getArg(0)` is an implicit `CXXConstructExpr`, not a `MemberExpr` (`MemberExpr` will be its indirect child). The case should be handled correctly.


More information about the cfe-commits mailing list