From a11ff47e2a6f609620eb1689cadbf31dbdd5b229 Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Mon, 6 Dec 2021 15:05:59 -0500 Subject: [PATCH] fix: allocating C++ compound literal on heap with Clang 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 Signed-off-by: Mathieu Desnoyers Change-Id: I62eea00381b7dc5958a09b13044ad9e7f7caf2ab --- README.md | 2 +- include/lttng/ust-compiler.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e4fb9f2d..a1010486 100644 --- a/README.md +++ b/README.md @@ -194,7 +194,7 @@ human-readable text log. 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 diff --git a/include/lttng/ust-compiler.h b/include/lttng/ust-compiler.h index 674b519c..eb201bdc 100644 --- a/include/lttng/ust-compiler.h +++ b/include/lttng/ust-compiler.h @@ -32,8 +32,8 @@ * 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 -- 2.34.1