Exclude Clang from the GCC version macro check for <= 4.8 since most
versions of Clang seem to identify themselves as GCC 4.2 which in this
case forces the allocation of C++ compound literals on the heap which
is only supported starting with Clang >= 6.0.
The macro was also broken for GCC <= 4.8 in C mode, add missing
parentheses around the 'or' statement to properly distinguish between C
and C++.
Also document the minimal supported version of Clang 4.0 to build C++
probe providers.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I62eea00381b7dc5958a09b13044ad9e7f7caf2ab
Since LTTng-UST 2.3, both tracepoints and tracepoint providers can be
compiled in C++. To compile tracepoint probes in C++, you need
-G++ >= 4.7 or Clang. The C++ compilers need to support C++11.
+G++ >= 4.7 or Clang >= 4.0. The C++ compilers need to support C++11.
Contact
* g++ 4.8 and prior do not support C99 compound literals. Therefore,
* force allocating those on the heap with these C++ compilers.
*/
-#if defined (__cplusplus) && defined (__GNUC__) && \
- (__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ <= 8))
+#if defined (__cplusplus) && !defined (__clang__) && defined (__GNUC__) && \
+ ((__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ <= 8)))
# ifndef LTTNG_UST_ALLOCATE_COMPOUND_LITERAL_ON_HEAP
# define LTTNG_UST_ALLOCATE_COMPOUND_LITERAL_ON_HEAP
# endif