[ET Trac] #2548: Compilation failure: "const" assignment in LoopControl/src/loopcontrol.cc
Roland Haas
trac-noreply at einsteintoolkit.org
Fri Aug 6 17:36:55 CDT 2021
#2548: Compilation failure: "const" assignment in LoopControl/src/loopcontrol.cc
Reporter: Bernard Kelly
Status: open
Milestone: ET_2021_05
Version: ET_2021_05
Type: bug
Priority: major
Component: EinsteinToolkit thorn
Comment (by Roland Haas):
I can compile fine with Intel 17 on Blue Waters if I use a modern enough C\+\+ library. However if I force it to use gcc 4.3 by using --gxx-name then I get the same error that you see:
```
COMPILING Carpet/LoopControl/src/loopcontrol.cc
/mnt/a/u/staff/rhaas/ET_Next/arrangements/Carpet/LoopControl/src/loopcontrol.cc(70): error: function call must have a constant value in a constant expression
lc_random.max() - lc_random.min() + 1;
^
/mnt/a/u/staff/rhaas/ET_Next/arrangements/Carpet/LoopControl/src/loopcontrol.cc(70): error: function call must have a constant value in a constant expression
lc_random.max() - lc_random.min() + 1;
^
compilation aborted for /mnt/a/u/staff/rhaas/ET_Next/configs/sim-intel/build/LoopControl/loopcontrol.cc (code 2)
```
so both this and #2547 are due to a too old stdc\+\+ library. Trying to work around this by using `minstd_rand::max()` does not work and gives:
```plaintext
COMPILING Carpet/LoopControl/src/loopcontrol.cc
/mnt/a/u/staff/rhaas/ET_Next/arrangements/Carpet/LoopControl/src/loopcontrol.cc(70): error: a nonstatic member reference must be relative to a specific object
minstd_rand::max() - minstd_rand::min() + 1;
^
/mnt/a/u/staff/rhaas/ET_Next/arrangements/Carpet/LoopControl/src/loopcontrol.cc(70): error: a nonstatic member reference must be relative to a specific object
minstd_rand::max() - minstd_rand::min() + 1;
^
compilation aborted for /mnt/a/u/staff/rhaas/ET_Next/configs/sim-intel/build/LoopControl/loopcontrol.cc (code 2)
```
indicating that the library does not declare the function correctly as a static class function and indeed digging into the header files on BlueWaters shows it to be defined as:
```c++
result_type
max() const
{ return __m - 1; }
```
A workaround would be to remove `constexpr` from this line of code but given that thorn `Vectors` also fails with due to the same old C\+\+ library, I am not sure if the workaround would help a lot \(would only help in situations where `LoopControl` but not `Vectors` is used\).
--
Ticket URL: https://bitbucket.org/einsteintoolkit/tickets/issues/2548/compilation-failure-const-assignment-in
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.einsteintoolkit.org/pipermail/trac/attachments/20210806/889b6db5/attachment-0001.html
More information about the Trac
mailing list