On Solaris 10, with the Sun Studio 11 'CC' (a.k.a. SunPRO C++),
I see this compilation error:
CC -O -DHAVE_CONFIG_H -DEXEEXT=\"\" -DEXEEXT=\"\" -I. -I../../gltests -I..
-DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. -I../../gltests -I..
-I../../gltests/.. -I../gllib -I../../gltests/../gllib
-I/home/haible/prefix-x86/include -D_REENTRANT -g -c -o test-nullptr-c++.o
../../gltests/test-nullptr-c++.cc
"../../gltests/test-nullptr-c++.cc", line 38: Error: The function
"print_stack_trace" must have a prototype.
"../../gltests/test-nullptr-c++.cc", line 42: Error: The function
"print_stack_trace" must have a prototype.
"../../gltests/test-nullptr-c++.cc", line 45: Error: The function
"print_stack_trace" must have a prototype.
"../../gltests/test-nullptr-c++.cc", line 48: Error: The function
"print_stack_trace" must have a prototype.
4 Error(s) detected.
What's happening is:
* The module 'stack-trace' is in use. It ought to declare the
print_stack_trace() function in stdlib.h.
* stdlib.h is included twice:
- from unistd.h, with __need_system_stdlib_h defined,
- then from macros.h, with __need_system_stdlib_h no longer defined.
* "CC -E -H" shows the list of includes, and it is clear that the
'#include <stdlib.h>' from tests/macros.h is ineffective because there
was already a '#include <stdlib.h>' earlier.
(The same effect does not happen always. For example, ../gllib/sys/types.h
is included many times.)
So, we have to make sure that the first '#include <stdlib.h>' already
includes the entire file, including the 'print_stack_trace' declaration.
2024-09-16 Bruno Haible <[email protected]>
stdlib: Fix compilation error with Sun C++.
* lib/stdlib.in.h: Don't obey the special invocation convention when
Sun C++ is used.
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
index e6c5123713..6667f426ad 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -20,7 +20,9 @@
#endif
@PRAGMA_COLUMNS@
-#if (defined __need_system_stdlib_h && !defined _GLIBCXX_STDLIB_H) || defined
__need_malloc_and_calloc
+#if ((defined __need_system_stdlib_h && !defined _GLIBCXX_STDLIB_H) \
+ || defined __need_malloc_and_calloc) \
+ && !defined __SUNPRO_CC
/* Special invocation conventions inside some gnulib header files,
and inside some glibc header files, respectively.
Do not recognize this special invocation convention when GCC's