[libc-commits] [PATCH] D131301: [libc] add int to string for extended bases

Michael Jones via Phabricator via libc-commits libc-commits at lists.llvm.org
Mon Aug 8 10:56:08 PDT 2022


michaelrj added inline comments.


================
Comment at: libc/src/__support/integer_to_string.h:82
 
+constexpr size_t floor_log_2(size_t num) {
+  size_t i = 0;
----------------
lntue wrote:
> Look like a good candidate for `clz` builtin, unless it's only used for compile-time constants.  In that case, it should be ok to bump this to C++20 and use `consteval`.  Otherwise, you'll need to add `inline` for this.
it is used only for compile time constants. I don't know if we want to bump this to C++20, so I've marked it as constexpr inline for the moment. I think you're right that this could use `clz`, but since it's only at compile time I don't think that's necessary.


================
Comment at: libc/src/__support/integer_to_string.h:109
+  static_assert(
+      2 <= Base <= 36,
+      "BaseIntegerToString can only have a base between 2 and 36 inclusive.");
----------------
lntue wrote:
> Can we really do this?  On the surface it looks equivalent to `int(bool(2 <= Base)) <= 36` which is always `true` since `int(bool) is either 0 or 1.
you're right, that doesn't work. Fixed.


================
Comment at: libc/src/__support/integer_to_string.h:123
+    if (conv_base < Base) {
+      return;
+    }
----------------
sivachandra wrote:
> Silently return? Can we perhaps return a boolean value to indicate success/failure?
we could, but this function is only called from the constructor so I'm not sure what we'd do with that information.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D131301



More information about the libc-commits mailing list