[PATCH] D17993: [CodeGen] Apply 'nonnull' to 'this' pointer arguments.
John McCall via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 9 09:28:43 PST 2016
rjmccall added a comment.
Hal, I think you're talking about a slightly different thing. This patch is adding an assumption that C++ this pointers are non-null, but only when -fno-delete-null-pointer-checks is not passed. The flag is therefore at least somewhat functional. (I would argue that it should also cover the other cases where we add non-null assumptions, e.g. with reference arguments. It's less clear whether it should change the code-generation of, say, non-trivial l-value derived-to-base casts, where there's a null check that's implicitly elided in the frontend.)
If you're saying that GCC's interpretation of this flag is more aggressive than that — e.g. if it also changes how aggressively the optimizer will decide that a pointer is non-null due to (say) it having been previously used as a load/store argument, as in the infamous Linux kernel bug that GCC got heat over — then I agree that we should probably avoid saying that we support the attribute until we find a way to emulate that. That, I assume, would have to be an attribute on the Function that weakens that analysis.
I hope GCC's interpretation of this flag doesn't completely disable null-check elimination, e.g. when the pointer is obviously the address of a local or global variable.
================
Comment at: include/clang/Driver/Options.td:1157
@@ -1154,1 +1156,3 @@
+def fno_delete_null_pointer_checks : Flag<["-"], "fno-delete-null-pointer-checks">,
+ Group<f_clang_Group>, Flags<[CC1Option]>;
----------------
Please include HelpText, and it's probably worth talking about this in the actual docs.
http://reviews.llvm.org/D17993
More information about the cfe-commits
mailing list