Quuxplusone added a comment.

LGTM.  I wonder if rsmith is happy with the exact semantics of 
"shouldUseUndefinedBehaviorReturnOptimization"... but that seems like a tiny 
nit that's fixable post-commit anyway.



================
Comment at: include/clang/Driver/Options.td:1324
+  HelpText<"Use C++ undefined behaviour optimization for control flow paths"
+     "that reach the end of the function without executing a required return">;
+def fno_strict_return : Flag<["-"], "fno-strict-return">, Group<f_Group>,
----------------
Nit: looks like Clang spells it "behavior"?

Nit: I'm still pedantically uncomfortable with describing the strict-return 
behavior as an "optimization". I suggest rephrasing this as "-fstrict-return: 
Treat control flow paths that fall off the end of a non-void function as 
unreachable."

(I notice that neither -fstrict-aliasing nor -fstrict-overflow have any help 
text at all.)


================
Comment at: lib/CodeGen/CodeGenFunction.cpp:1173
+    } else if (CGM.getCodeGenOpts().StrictReturn ||
+               shouldUseUndefinedBehaviorReturnOptimization(FD, getContext())) 
{
+      if (CGM.getCodeGenOpts().OptimizationLevel == 0)
----------------
arphaman wrote:
> Quuxplusone wrote:
> > I'd expect this to look more like
> > 
> >     bool ShouldOmitUnreachable = !CGM.getCodeGenOpts().StrictReturn && 
> > FD->getReturnType().isTriviallyCopyableType(Context);
> >     // same ifs as the old code
> >     if (!ShouldOmitUnreachable) {
> >         Builder.CreateUnreachable();
> >         Builder.ClearInsertionPoint();
> >     }
> > 
> > Or in fact, is there a good reason this codepath isn't piggybacking on 
> > `FD->hasImplicitReturnZero()`?  Why not just give every function 
> > `hasImplicitReturnZero` when `-fno-strict-return` is in effect?
> > 
> > At which point, `-fno-strict-return` might seem like the wrong name; you 
> > could just call it something like `-fimplicit-return-zero`, which would 
> > also have the minor benefit of making the `-fno-*` option the default.
> > Or in fact, is there a good reason this codepath isn't piggybacking on 
> > FD->hasImplicitReturnZero()? Why not just give every function 
> > hasImplicitReturnZero when -fno-strict-return is in effect?
> 
> I understand your suggestion, but I'd prefer not to set 
> `hasImplicitReturnZero` for all functions, since then Sema won't warn about 
> the missing return, which we still want.
> 
> > At which point, -fno-strict-return might seem like the wrong name; you 
> > could just call it something like -fimplicit-return-zero, which would also 
> > have the minor benefit of making the -fno-* option the default.
> 
> I don't think a name like "-fimplicit-return-zero" is appropriate, since it 
> implies that the compiler guarantees a return of a zero value. This might 
> mislead users as they might think that they can use the return value without 
> triggering undefined behaviour, which isn't true.
> 
> since then Sema won't warn about the missing return

Ah. Yeah, that makes sense.


================
Comment at: lib/CodeGen/CodeGenFunction.cpp:1071
+/// Return true if the given function \p FD should use the undefined behavior
+/// return optimization.
+static bool
----------------
Nit: this code comment is not particularly useful to the reader.


Repository:
  rL LLVM

https://reviews.llvm.org/D27163



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

Reply via email to