[flang] [clang] [llvm] [clang-tools-extra] [flang] GETLOG runtime and extension implementation: get login username (PR #74628)

Rainer Orth via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 10 04:18:15 PST 2024


rorth wrote:

This patch broke the Solaris build:
```
FAILED: tools/flang/runtime/CMakeFiles/obj.FortranRuntime.dir/extensions.cpp.o 
[...]
/vol/llvm/src/llvm-project/dist/flang/runtime/extensions.cpp:60:24: error: use of undeclared identifier 'LOGIN_NAME_MAX'
   60 |   const int nameMaxLen{LOGIN_NAME_MAX + 1};
      |                        ^
/vol/llvm/src/llvm-project/dist/flang/runtime/extensions.cpp:61:12: warning: variable length arrays in C++ are a Clang extension [-Wvla-cxx-extension]
   61 |   char str[nameMaxLen];
      |            ^~~~~~~~~~
/vol/llvm/src/llvm-project/dist/flang/runtime/extensions.cpp:61:12: note: initializer of 'nameMaxLen' is unknown
/vol/llvm/src/llvm-project/dist/flang/runtime/extensions.cpp:60:13: note: declared here
   60 |   const int nameMaxLen{LOGIN_NAME_MAX + 1};
      |             ^
1 warning and 1 error generated.
```
and
```
FAILED: tools/flang/unittests/Runtime/CMakeFiles/FlangRuntimeTests.dir/CommandTest.cpp.o
[...]
/vol/llvm/src/llvm-project/dist/flang/unittests/Runtime/CommandTest.cpp:530:21: error: use of undeclared identifier 'LOGIN_NAME_MAX' 
  530 |   const int charLen{LOGIN_NAME_MAX + 2};
      |                     ^
/vol/llvm/src/llvm-project/dist/flang/unittests/Runtime/CommandTest.cpp:531:14: warning: variable length arrays in C++ are a Clang extension [-Wvla-cxx-extension]
  531 |   char input[charLen];
      |              ^~~~~~~
/vol/llvm/src/llvm-project/dist/flang/unittests/Runtime/CommandTest.cpp:531:14: note: initializer of 'charLen' is unknown
/vol/llvm/src/llvm-project/dist/flang/unittests/Runtime/CommandTest.cpp:530:13: note: declared here
  530 |   const int charLen{LOGIN_NAME_MAX + 2};
      |             ^
```
As documented in Solaris `limits.h(3HEAD)` (and exactly matching XPG7), `LOGIN_NAME_MAX` not being defined is an allowed configuration:
```
   Runtime Invariant Values (Possibly Indeterminate)
       A definition of one of the symbolic names  in  the  following  list  is
       omitted  from  <limits.h>  on specific implementations where the corre-
       sponding value is equal to or greater than the stated minimum,  but  is
       unspecified.

       This  indetermination  might  depend  on the amount of available memory
       space on a specific instance of a specific implementation.  The  actual
       value  supported  by  a  specific  instance  will  be  provided  by the
       sysconf() function.
[...]
       LOGIN_NAME_MAX

           Maximum length of a login name.
```
So the code needs to fall back to `sysconf(_SC_LOGIN_NAME_MAX)` if `LOGIN_NAME_MAX` is not defined.

I've used the attached patch to implement this, which allowed the build and `ninja check-all` to finish.  I'm uncertain if support for `syscconf() == -1` is really necessary, though.
[lnm.txt](https://github.com/llvm/llvm-project/files/13887475/lnm.txt)


https://github.com/llvm/llvm-project/pull/74628


More information about the cfe-commits mailing list