JonasToth added inline comments.

================
Comment at: clang-tidy/modernize/ReplaceUncaughtExceptionCheck.cpp:32
+  Finder->addMatcher(
+      declRefExpr(to(functionDecl(hasName(MatchText)))).bind("call_expr"),
+      this);
----------------
koldaniel wrote:
> JonasToth wrote:
> > Interesting. Did you consider `callExpr` as well? I never used 
> > `declRefExpr` in this context but it might be a good choice too. Would it 
> > catch taking a function pointer to `std::uncaught_exception` too? If so, i 
> > need to overthink some of my code :)
> According to the original concept callExpr was used, but to match template 
> instantiations and other usages than calling the function directly, it seemed 
> to me a better and simpler solution to use declRefExpr. In case of function 
> pointer initializations like the this:
> 
>     bool (*foo)();
>     foo = &std::uncaught_exception;
>     res = foo();
> 
> there will be a warning and the fix will be applied too.
Could you add testcases for function pointers please?

Having tests for the template instantiations (in which form? using 
`std::uncaught_exceptions` as template argument for callables?) would be a good 
thing as well.


================
Comment at: clang-tidy/modernize/ReplaceUncaughtExceptionCheck.cpp:59
+  if (!BeginLoc.isMacroID()) {
+    Diag << FixItHint::CreateInsertion(BeginLoc.getLocWithOffset(TextLength),
+                                       "s");
----------------
koldaniel wrote:
> JonasToth wrote:
> > Could the location not simply be `EndLoc`?
> As I could see, when EndLoc was used in Diag (diag(..) of 
> CreateInsertion(...) methods,  it still pointed to the beginning of the token 
> marking the whole call. So if the CreateInsertion function looked like this: 
> 
>   Diag << FixItHint::CreateInsertion(EndLoc.getLocWithOffset(TextLength), 
> "s");
> 
> had the same effect after applying the fix its as
> 
>     Diag << FixItHint::CreateInsertion(BeginLoc.getLocWithOffset(TextLength), 
> "s");
> 
> for calls like 'uncaught_exception()' (without std:: namespace written at the 
> beginning, because it increases TextLength, and in case of EndLoc the offset 
> will be counted from the beginning of the function name, not the namespace 
> identifier).
Thats odd. You could do a Replacement with `getSourceRange` probably. Sounds 
more inefficient, but might be shorter in Code.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D40787



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to