Skip to content

[Bug]: Incorrect absl::bit_width return type for gcc <= 12 #1890

Open
@jmr

Description

@jmr

Describe the issue

absl::bit_width(0UL) should return an int. With gcc <= 12 and C++20, it's unsigned long since absl::bit_width is an alias for std::bit_width.

using std::bit_width;

libcstdc++ fixed this in gcc-mirror/gcc@4581328#diff-b38391c368270ae056dc788c5adfd749d9fd6fffc9a7c2287da44ce88b6139fd

Steps to reproduce the problem

https://godbolt.org/z/jebjo6GKb

static_assert(std::is_same_v<decltype(std::bit_width(0UL)), int>);

What version of Abseil are you using?

LTS 20250512.0

What operating system and version are you using?

debian testing

What compiler and version are you using?

Using built-in specs.
COLLECT_GCC=/opt/compiler-explorer/gcc-12.4.0/bin/g++
Target: x86_64-linux-gnu
Configured with: ../gcc-12.4.0/configure --prefix=/opt/compiler-explorer/gcc-build/staging --enable-libstdcxx-backtrace=yes --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --disable-bootstrap --enable-multiarch --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --enable-clocale=gnu --enable-languages=c,c++,fortran,ada,objc,obj-c++,go,d --enable-ld=yes --enable-gold=yes --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-linker-build-id --enable-lto --enable-plugins --enable-threads=posix --with-pkgversion=Compiler-Explorer-Build-gcc--binutils-2.42
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 12.4.0 (Compiler-Explorer-Build-gcc--binutils-2.42) 
COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-g' '-o' '/app/output.s' '-masm=intel' '-fno-verbose-asm' '-S' '-std=c++20' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' '/app/'
 /opt/compiler-explorer/gcc-12.4.0/bin/../libexec/gcc/x86_64-linux-gnu/12.4.0/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -iprefix /opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/x86_64-linux-gnu/12.4.0/ -D_GNU_SOURCE <source> -quiet -dumpdir /app/ -dumpbase output.cpp -dumpbase-ext .cpp -masm=intel -mtune=generic -march=x86-64 -g -std=c++20 -version -fdiagnostics-color=always -fno-verbose-asm -o /app/output.s
GNU C++20 (Compiler-Explorer-Build-gcc--binutils-2.42) version 12.4.0 (x86_64-linux-gnu)
	compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/x86_64-linux-gnu/12.4.0/../../../../x86_64-linux-gnu/include"
ignoring duplicate directory "/opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/12.4.0/../../../../include/c++/12.4.0"
ignoring duplicate directory "/opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/12.4.0/../../../../include/c++/12.4.0/x86_64-linux-gnu"
ignoring duplicate directory "/opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/12.4.0/../../../../include/c++/12.4.0/backward"
ignoring duplicate directory "/opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/12.4.0/include"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring duplicate directory "/opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/12.4.0/include-fixed"
ignoring nonexistent directory "/opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/../../lib/gcc/x86_64-linux-gnu/12.4.0/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/x86_64-linux-gnu/12.4.0/../../../../include/c++/12.4.0
 /opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/x86_64-linux-gnu/12.4.0/../../../../include/c++/12.4.0/x86_64-linux-gnu
 /opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/x86_64-linux-gnu/12.4.0/../../../../include/c++/12.4.0/backward
 /opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/x86_64-linux-gnu/12.4.0/include
 /opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/x86_64-linux-gnu/12.4.0/include-fixed
 /usr/local/include
 /opt/compiler-explorer/gcc-12.4.0/bin/../lib/gcc/../../include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
GNU C++20 (Compiler-Explorer-Build-gcc--binutils-2.42) version 12.4.0 (x86_64-linux-gnu)
	compiled by GNU C version 11.4.0, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version isl-0.24-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: c7335fbf28754d6313ca2e82b97549fe
<source>:4:20: error: static assertion failed
    4 | static_assert(std::is_same_v<decltype(std::bit_width(0UL)), int>);
      |               ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Compiler returned: 1

What build system are you using?

n/a

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions