[llvm-dev] [RFC] Coding Standards: "prefer `int` for, regular arithmetic, use `unsigned` only for bitmask and when you, intend to rely on wrapping behavior."

David Greene via llvm-dev llvm-dev at lists.llvm.org
Fri Jun 14 11:32:57 PDT 2019


+1.

                     -David

Chris Bieneman via llvm-dev <llvm-dev at lists.llvm.org> writes:

> I have not chimed in on the general signed/unsigned discussion, but my experience porting software to various embedded systems and game consoles over the
> years has taught me to always prefer using explicitly sized integer types except where size_t should be used.
>
> While it is generally true that most modern 64-bit architectures all agree on the meanings of `short`, `long`, `unsigned`, `int`, and others. There is no guarantee of
> that. I would strongly support a coding standard that suggested preferring explicitly sized integer types (i.e. int64_t) over `int`.
>
> -Chris 
>
>  On Jun 14, 2019, at 6:40 AM, via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>
>  -----Original Message-----
>  From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of JF
>  Bastien via llvm-dev
>  Sent: Thursday, June 13, 2019 12:25 PM
>  To: John Reagan
>  Cc: llvm-dev at lists.llvm.org
>  Subject: Re: [llvm-dev] [RFC] Coding Standards: "prefer `int` for, regular
>  arithmetic, use `unsigned` only for bitmask and when you, intend to rely
>  on wrapping behavior."
>
>  On Jun 13, 2019, at 9:19 AM, John Reagan <john.reagan at vmssoftware.com>
>
>  wrote:
>
>  Yes.  We currently build LLVM 3.4.2 on our OpenVMS Itanium box with an
>  older EDG/Intel C++03 compiler to create legacy cross-compilers to our
>  OpenVMS x86 box (well, VirtualBox).  We do have a few tweaks to the
>  relocations to access static data always through the GOT (including
>  CodeGen's static data).  Our linker sees references to code (which might
>  be in 64-bit space) and creates trampolines in 32-bit space.  That lets
>  any legacy code from the VAX-days to continue to take the address of a
>  routine and save it into some INTEGER*4 Fortran variable.
>
>  So mostly a small memory model with a few things from medium/large.
>
>  I've been unable to build the companion clang 3.4.2 however as its use
>  of templates seems to push our old compiler over the edge of sanity.
>
>  We're working on bootstrapping 8.0.0.  Compile 8.0.0 on Linux, move
>  objects to our OpenVMS Itanium box to use the cross-linker (which can
>  handle Linux objects as well as our own), move the resulting image to
>  our OpenVMS x86 box...  (and the same thing for libcxx, compiler-rt,
>  libcxxabi, etc.) and with a wave of a magic wand, we end up with a
>  native clang.  And with a little more waving, our other legacy compilers
>  (our C, BLISS, Pascal, COBOL, BASIC, and Fortran)
>
>  I'm planning on submitting a lightning talk for this fall on "When 3
>  memory models isn't enough.”
>
>  This is a rare occurrence… but you leave me speechless. I don’t even know
>  where to start.
>
>  The word-size migration is rare but not unique.  The HP/Tandem NonStop
>  line has moved from 16-bit to 32-bit to 64-bit over the decades, and we
>  needed to handle mixed-size pointers and "int" weirdness at each stage.  
>  OpenVMS is a special snowflake in terms of its LLVM bootstrapping process, 
>  and the mind just boggles at what John and his team have had to contend 
>  with. But the size part is certainly familiar to me, and actually simpler
>  than what NonStop had to deal with. (We weren't using LLVM, clearly, but
>  container size etc. is not a particularly LLVM-specific issue.)
>  --paulr
>
>  On 6/13/19 12:00 PM, JF Bastien wrote:
>
>  On Jun 12, 2019, at 2:01 PM, John Reagan via llvm-dev <llvm-
>
>  dev at lists.llvm.org> wrote:
>
>  On Tue, Jun 11, 2019 at 12:26 PM Michael Kruse <llvmdev at meinersbur.de>
>  wrote:
>
>  vector.size() returns a size_t, which on 64-bit platforms can
>
>  represent
>
>  types values larger than those that can fit into an int64_t.  So to
>
>  turn
>
>  your argument around, since it's theoretically possible to have a
>
>  vector
>
>  with more items than an int64_t can represent, isn't it already worth
>
>  it
>
>  to use size_t, which is an unsigned type?
>
>  That's not true on my platform.  I have 64-bit pointers so intptr_t is
>  64-bits, but the largest thing you can allocate is only 32-bits big so
>  size_t (and ptrdiff_t) are 32-bits.
>
>  It runs LLVM?
>
>  _______________________________________________
>  LLVM Developers mailing list
>  llvm-dev at lists.llvm.org
>  https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>  _______________________________________________
>  LLVM Developers mailing list
>  llvm-dev at lists.llvm.org
>  https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list