Rakete1111 added a comment.

Apart from the comments I think your patch LGTM, but I'll let someone else hav 
the final say.



================
Comment at: lib/Sema/SemaDecl.cpp:10266
       auto *FPT = NewFD->getType()->castAs<FunctionProtoType>();
-      bool AnyNoexcept = HasNoexcept(FPT->getReturnType());
-      for (QualType T : FPT->param_types())
-        AnyNoexcept |= HasNoexcept(T);
-      if (AnyNoexcept)
+      if (hasNoexcept(FPT->getReturnType()) ||
+          llvm::any_of(FPT->param_types(),
----------------
mattd wrote:
> mattd wrote:
> > Rakete1111 wrote:
> > > What you're doing here is a subset of what `hasNoexcept` is doing for 
> > > function types. Do you think it would make sense to use 
> > > `!FPT->isNothrow() && hasNoexcept(NewFW->getType())` or something like 
> > > that?
> > Thanks for the comments @Rakete1111.
> > 
> > I do see the similarity and was trying to implement a solution to take 
> > advantage of that.  However, I was running into trouble on assert/debug 
> > builds.  `llvm_unreachable`, called in `FunctionProtoType::canThrow`, will 
> > trigger on FunctionProtoType instances that have not yet had their 
> > exception-spec type evaluated.  `canThrow` is called on behalf of 
> > `isNothrow`.  Some of the test cases will fail in assert/debug builds if we 
> > place a call to to `FPT->isNothrow` here. 
> > 
> > The original code avoided this assertion by not calling `isNothrow` on FPT 
> > here, but instead just evaluating the return and parameter types of FPT.  I 
> > made this patch similar to what was already in place, but with the more  
> > thorough check in `hasNoexcept.`  I'd be pleased to remove this 
> > duplication/similarity if I can avoid this assertion.
> I just got back into looking at this issue.  Given that I was unable to 
> implement `!FPT->isNoThrow() && hasNoexcept(NewFW->getType())` without 
> triggering an assertion (discussed in my reply immediately above), is there 
> anything we should be doing differently here?  The change, as it sits now 
> (with the duplication), seems to work fine.
I think it's fine.


================
Comment at: lib/Sema/SemaDecl.cpp:10268
+          llvm::any_of(FPT->param_types(),
+                       [](QualType Q) { return hasNoexcept(Q); })) {
         Diag(NewFD->getLocation(),
----------------
Rakete1111 wrote:
> Same, that lambda is unnecessary.
You marked this comment as done but the lambda is still there :).


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55039/new/

https://reviews.llvm.org/D55039



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

Reply via email to