xazax.hun added inline comments.
================
Comment at: clang-tidy/modernize/ReplaceUncaughtExceptionCheck.cpp:59
+ if (!BeginLoc.isMacroID()) {
+ Diag << FixItHint::CreateInsertion(BeginLoc.getLocWithOffset(TextLength),
+ "s");
----------------
aaron.ballman wrote:
> JonasToth wrote:
> > 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.
> This fixit can break code if the code disallows narrowing conversions. e.g.,
> ```
> bool b{std::uncaught_exception()};
> ```
> In this case, the fixit will take the deprecated code and make it ill-formed
> instead. Perhaps a better fix-it would be to transform the code into
> `(std::uncaught_exceptions() > 0)` to keep the resulting expression type a
> `bool` and still not impact operator precedence?
Good point, but this kind of fix it is a bit ugly. Maybe skipping the fixit in
narrowing cases or only generate the more complicated replacement in the
narrowing case would be nicer.
================
Comment at: test/clang-tidy/modernize-replace-uncaught-exception.cpp:16
+template <typename T>
+int doSomething(T t) {
+ return t();
----------------
It would be great to have a test where the template parameter is a function
pointer and it is called with `uncaught_exception`. And with a check fixes make
sure that the definition of the template is untouched.
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D40787
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits