[PATCH] D73380: [clang] Annotating C++'s `operator new` with more attributes

Roman Lebedev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 24 13:51:18 PST 2020


lebedev.ri marked 2 inline comments as done.
lebedev.ri added a comment.

In D73380#1839603 <https://reviews.llvm.org/D73380#1839603>, @xbolva00 wrote:

> LLVM already infers noalias nonnull for eg. _Znwm so noalias and nonnull info added by clang will not increase power of LLVM. Or?


To be honest, i don't really believe it is LLVM place to deduce attributes on standard library functions like these, frontend should be doing that.
Because as noted in patch description, if `noalias` is blindly "deduced" by LLVM,
that is a miscompile if `-fno-assume-sane-operator-new` was specificed.

> Alignment info is useful I think.

That is the main motivation, yes.



================
Comment at: clang/test/CodeGenCXX/builtin-operator-new-delete.cpp:54
 }
-// CHECK: declare noalias i8* @_ZnwmSt11align_val_t(i64, i64) [[ATTR_NOBUILTIN:#[^ ]*]]
+// CHECK: declare nonnull i8* @_ZnwmSt11align_val_t(i64, i64) [[ATTR_NOBUILTIN:#[^ ]*]]
 // CHECK: declare void @_ZdlPvSt11align_val_t(i8*, i64) [[ATTR_NOBUILTIN_NOUNWIND:#[^ ]*]]
----------------
xbolva00 wrote:
> We lost noalias here?
See two lines above, it migrated to the callsite.

I'm going to argue that the previous behavior was erroneous:
despite what `-fno-assume-sane-operator-new` is supposed to be doing,
i **suspect** it will magically break with LTO.
(we'd have `declare noalias nonnull i8* @_ZnwmSt11align_val_t(i64, i64)` in one TU
and `declare nonnull i8* @_ZnwmSt11align_val_t(i64, i64)` in another - one with `noalias`
and one without - how would they be merged? by dropping `noalias`, or keeping it?)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D73380





More information about the cfe-commits mailing list