[PATCH] D50805: Don't warn on returning the address of a label

Arthur O'Dwyer via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 16 00:02:03 PDT 2018


Quuxplusone added a comment.

> I think that, ultimately, this warning isn't worth the code complexity in clang to support it.

The code complexity is //at most// 11 lines (the 11 lines removed by this patch), which really isn't much.  But there's an interface-complexity argument to be made, for sure.  If you added a new option `-Wret-addr-label` as suggested above (for a total patch of +2 lines), then is it accurate to say:

- if `-Wret-addr-label` was enabled by default, we know of at least one codebase that would pass `-Wno-ret-addr-label` to their build
- if `-Wret-addr-label` was disabled by default, we don't know of any codebases that would voluntarily enable it

And if nobody would enable it voluntarily... might as well eliminate it, right?



================
Comment at: clang/test/Analysis/stack-addr-ps.cpp:81
     label:
-    void *const &x = &&label; // expected-note {{binding reference variable 'x' here}}
-    return x; // expected-warning {{returning address of label, which is local}}
+    void *const &x = &&label;
+    return x;
----------------
Is it just me, or is this test case relying on lifetime extension for no good reason? Why is this not `void *const x = &&label;`?


https://reviews.llvm.org/D50805





More information about the cfe-commits mailing list