google / google/benchmark

[BUG] Google benchmark doesn't compile on Solaris

Open
#1,499 0 comments 0 reactions 0 assignees View on GitHub
bug help wanted
Dominant language
C++
Stars
10.4k
Forks
1.8k
Avg merge
2d 4h
Merged PRs (30d)
8

Description

**Describe the bug**

`benchmark` doesn't compile on Solaris 11.4 (neither upstream nor the downstream copies in LLVM).

**System**
- OS: Solaris 11.4
- Compiler and version: GCC 12.1.0 and LLVM 15.0.0

**To reproduce**
2. `cmake -DCMAKE_BUILD_TYPE=Release -DBENCHMARK_DOWNLOAD_DEPENDENCIES=on `
4. `make`
```
/vol/llvm/src/llvm-project/benchmark/benchmark.git/src/sysinfo.cc: In function ‘std::string benchmark::{anonymous}::GetSystemName()’:
/vol/llvm/src/llvm-project/benchmark/benchmark.git/src/sysinfo.cc:446:54: note: ‘#pragma message: HOST_NAME_MAX not defined. using 64’
446 | #pragma message("HOST_NAME_MAX not defined. using 64")
|
```
```
/vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc:13:11: error: ‘namespace single { }’ redeclared as different kind of entity
13 | namespace single {
| ^~~~~~
In file included from /usr/gcc/12/lib/gcc/x86_64-pc-solaris2.11/12.1.0/include-fixed/math.h:391,
from /usr/gcc/12/include/c++/12.1.0/bits/std_abs.h:40,
from /usr/gcc/12/include/c++/12.1.0/cstdlib:77,
from /vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc:3:
/usr/include/floatingpoint.h:69:15: note: previous declaration ‘typedef float single’
69 | typedef float single;
| ^~~~~~
/vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc: In function ‘void DoSetup1(const benchmark::State&)’:
/vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc:18:5: error: ‘single’ is not a class, namespace, or enumeration
18 | ++single::setup_call;
| ^~~~~~
/vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc: In function ‘void DoTeardown1(const benchmark::State&)’:
/vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc:25:5: error: ‘single’ is not a class, namespace, or enumeration
25 | ++single::teardown_call;
| ^~~~~~
In file included from /usr/gcc/12/include/c++/12.1.0/cassert:44,
from /vol/llvm/src/llvm-project/benchmark/benchmark.git/include/benchmark/benchmark.h:180,
from /vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc:9:
/vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc: In function ‘int main(int, char**)’:
/vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc:137:10: error: ‘single’ is not a class, namespace, or enumeration
137 | assert(single::setup_call == 4);
| ^~~~~~
/vol/llvm/src/llvm-project/benchmark/benchmark.git/test/benchmark_setup_teardown_test.cc:138:10: error: ‘single’ is not a class, namespace, or enumeration
138 | assert(single::teardown_call == 4);
| ^~~~~~
```
The `llvm-project` in-tree `benchmark` used to compile with `-Wcast-qual` added, which produces additional errors:
```
/vol/llvm/src/llvm-project/benchmark/benchmark-rorth.git/src/sysinfo.cc:658:42: error: cast from 'const char *' to 'char *' drops const qualifier [-Werror,-Wcast-qual]
kstat_t* ksp = kstat_lookup(kc, (char*)"cpu_info", -1, (char*)"cpu_info0");
^
/vol/llvm/src/llvm-project/benchmark/benchmark-rorth.git/src/sysinfo.cc:658:65: error: cast from 'const char *' to 'char *' drops const qualifier [-Werror,-Wcast-qual]
kstat_t* ksp = kstat_lookup(kc, (char*)"cpu_info", -1, (char*)"cpu_info0");
^
/vol/llvm/src/llvm-project/benchmark/benchmark-rorth.git/src/sysinfo.cc:668:53: error: cast from 'const char *' to 'char *' drops const qualifier [-Werror,-Wcast-qual]
(kstat_named_t*)kstat_data_lookup(ksp, (char*)"current_clock_Hz");
^
3 errors generated.
```
**Expected behavior**
The code should compile cleanly.

**Additional context**
- Solaris needs to include `` for `MAXHOSTNAMELEN`. Also, `sysconf(3C)` returns `long`.
- Solaris `` has a conflicting `single` `typedef`. Rename the namespace to `singlethreaded` to avoid the conflict and reflect what's actually meant here.

I have a patch to fix these issues and mean to post a pull request once the CLA issue is sorted out (I should have one in place from `golang` work).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.