vsk planned changes to this revision.
vsk added inline comments.

================
Comment at: lib/CodeGen/CGCall.cpp:2756
                                          SourceLocation EndLoc) {
+  if (FI.isNoReturn()) {
+    // Noreturn functions don't return.
----------------
efriedma wrote:
> vsk wrote:
> > efriedma wrote:
> > > Unfortunately, this won't catch cases where the caller has a noreturn 
> > > marking, but the callee doesn't.  Maybe strip the noreturn attribute from 
> > > the caller, then put the sanitizer check into both the caller and callee?
> > If the caller sees a noreturn marking on the call target, inserting a 
> > 'reached-unreachable' check after the call is UB, and the optimizer throws 
> > it away. Perhaps you had a different case in mind?
> I'm thinking of the case where the caller can't see the callee, like this:
> 
> a.c:
> void a(void) __attribute((noreturn));
> void b(void) { a(); }
> 
> b.c:
> void a(void) {}
Got it. So clang would then do:

a.c:
void a(void) /* strip the noreturn attribute */;
void b(void) { a(); /* insert a reached-unreachable check here */}


https://reviews.llvm.org/D40698



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

Reply via email to