The vararray warnings are probably just a matter of (-W) flags passed to
the compiler. The Mac OS toolchain uses Clang, which definitely supports
them.
They are generally a bad idea, though for several reasons. There has been
a discussion in the Linux kernel about that. They can be quite
inefficient. But more importantly, they can be outright dangerous,
especially if you do stuff like `char si[strlen(const_si) + 1];`.
Do you know that const_si cannot be arbitratrily long and therefore cause
stack overflows?
Even if you do know it can't stack overflow, you'd have to document this,
perhaps add assertions, etc.
Generally not worth it. I'd rather allocate on the heap.
Best regards,
Robin
On Fri, 15 Aug 2025, Blake McBride wrote:
If variable-length arrays are not supported by standard C++, why use them? I'm
sure you don't strictly need them, and by using them GNU-APL becomes
non-portable.
--blake
On Fri, Aug 15, 2025 at 12:06 PM Dr. Jürgen Sauermann via Bugs and suggestions for
GNU APL <bug-apl@gnu.org> wrote:
Hi Louis,
thanks, hopefully fixed in SVN 1880.
I believe I have caught most of the C++ warnings. The warning about
dynamic arrays is somewhat bogus since every C++ compiler that I know of
supports dynamic arrays event though they are not standardised in C++ (and
only god knows why not).
I haven't touched the ld warnings; it seems like these linker flags are
needed on
some platforms. It might be that re-running libtoolize and/or aclocal
gets rid of
these warnings.
Best Regards,
Jürgen
On 8/12/25 20:18, Louis Chretien wrote:
Yes, it did. The build was successful despite the warnings.
—
Louis Chrétien
lchret...@mac.com
On Aug 12, 2025, at 13:18, Dr. Jürgen Sauermann
<mail@jürgen-sauermann.de> wrote:
Hi Louis,
I will look into this. Did the build produce a working apl binary despite
the warnings?
Thanks,
Jürgen
On 7/21/25 18:33, Louis Chretien via Bugs and suggestions for GNU APL
wrote:
There is a bunch of warnings on the latest build of GNU APL for Mac OS
14.7.6:
==============================
Backtrace.cc:1401:18: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
1401 | char si[strlen(const_si) + 1];
| ^~~~~~~~~~~~~~~~~~~~
Backtrace.cc:1401:25: note: read of non-constexpr variable 'const_si' is not
allowed in a constant expression
1401 | char si[strlen(const_si) + 1];
| ^
Backtrace.cc:1400:23: note: declared here
1400 | const char * const_si = strings[size - i - 1];
| ^
1 warning generated.
Bif_F12_INDEX_OF.cc:75:22: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
75 | ShapeItem zz[rk_Z];
| ^~~~
Bif_F12_INDEX_OF.cc:75:22: note: initializer of 'rk_Z' is not a constant
expression
Bif_F12_INDEX_OF.cc:70:13: note: declared here
70 | const sRank rk_Z = Z->get_rank();
| ^
1 warning generated.
PrimitiveFunction.cc:538:20: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
538 | ShapeItem weight_Z[rank_Z];
| ^~~~~~
PrimitiveFunction.cc:538:20: note: read of non-const variable 'rank_Z' is not
allowed in a constant expression
PrimitiveFunction.cc:517:11: note: declared here
517 | ShapeItem rank_Z = 0;
| ^
1 warning generated.
Quad_CR.cc:1143:16: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
1143 | UTF8 bytes_utf[len_B + 10];
| ^~~~~~~~~~
Quad_CR.cc:1143:16: note: initializer of 'len_B' is not a constant expression
Quad_CR.cc:1141:17: note: declared here
1141 | const ShapeItem len_B = B->element_count();
| ^
Quad_CR.cc:1723:32: warning: variable 'bi' set but not used
[-Wunused-but-set-variable]
1723 | if (const APL_Integer bi = cell_B.get_near_int()) chunk |=
bit;
| ^
2 warnings generated.
Quad_DLX.cc:465:16: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
465 | char rows_used[rows];
| ^~~~
Quad_DLX.cc:465:16: note: implicit use of 'this' pointer is only allowed within
the evaluation of a call to a 'constexpr' member function
Quad_DLX.cc:478:18: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
478 | int row[cols];
| ^~~~
Quad_DLX.cc:478:18: note: implicit use of 'this' pointer is only allowed within
the evaluation of a call to a 'constexpr' member function
2 warnings generated.
Tokenizer.cc:966:13: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
966 | char buffer[int_digits.size() + fract_digits.size() +
expo_digits.size() + 20];
|
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tokenizer.cc:966:24: note: non-constexpr function 'size' cannot be used in a
constant expression
966 | char buffer[int_digits.size() + fract_digits.size() +
expo_digits.size() + 20];
| ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/string:1284:65:
note: declared here
1284 | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 size_type size()
const _NOEXCEPT {
| ^
1 warning generated.
UCS_string_vector.cc:228:25: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
228 | ShapeItem column_widths[column_count];
| ^~~~~~~~~~~~
UCS_string_vector.cc:228:25: note: function parameter 'column_count' with
unknown value cannot be used in a constant expression
UCS_string_vector.cc:225:59: note: declared here
225 | UCS_string_vector::print_table(std::ostream & out, size_t column_count)
const
| ^
1 warning generated.
UserFunction.cc:638:13: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
638 | char status[get_text_size()]; status[0] = Function_header;
| ^~~~~~~~~~~~~~~
UserFunction.cc:638:13: note: implicit use of 'this' pointer is only allowed
within the evaluation of a call to a 'constexpr' member function
UserFunction.cc:731:13: warning: variable length arrays in C++ are a Clang
extension [-Wvla-cxx-extension]
731 | char status[get_text_size()]; status[0] = Function_header;
| ^~~~~~~~~~~~~~~
UserFunction.cc:731:13: note: implicit use of 'this' pointer is only allowed
within the evaluation of a call to a 'constexpr' member function
UserFunction.cc:856:35: warning: variable 'ec' set but not used
[-Wunused-but-set-variable]
856 | if (const ErrorCode ec = transform_new_multi_lines())
| ^
UserFunction.cc:875:35: warning: variable 'ec' set but not used
[-Wunused-but-set-variable]
875 | if (const ErrorCode ec = transform_old_multi_lines())
| ^
UserFunction.cc:1414:24: warning: variable 'ec' set but not used
[-Wunused-but-set-variable]
1414 | if (const ErrorCode ec = parser.parse(body_text, body, true))
| ^
5 warnings generated.
==============================
Also, there is an option on the ld command that should probably be removed in
the makefile:
==============================
checking for -single_module linker flag... ld: warning: -single_module is
obsolete
no
ld: warning: -bind_at_load is deprecated on macOS
==============================
---
Louis Chrétien
lchret...@mac.com