ECMEnableSanitizers.cmake: fix GCC's "note: variable tracking size limit exceeded" when using asan

Upstream pull requests:
- https://invent.kde.org/frameworks/extra-cmake-modules/-/merge_requests/519
- https://invent.kde.org/frameworks/extra-cmake-modules/-/merge_requests/521

Says the commit message:

> Set the max-vartrack-size parameter to 0 (= unlimited) to avoid
> GCC's "note: variable tracking size limit exceeded with
> -fvar-tracking-assignments, retrying without" message you get when
> you compile with asan sometimes.
>
> This is reported¹ to speed up compilation, not slow it down.
>
> ¹ https://stackoverflow.com/a/75704837/134841

Pick-to: 6.8 6.5 5.15
Change-Id: I2489bbe3d3cb12cc52d7041499e38bb05c73aa3a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit 39ec71237f79f1a1aecd278b8c610e70c9cd1c67)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Marc Mutz 2025-03-14 18:34:46 +01:00 committed by Qt Cherry-pick Bot
parent 1c708527fb
commit 0159e662ee
3 changed files with 97 additions and 0 deletions

View File

@ -0,0 +1,45 @@
From cbda7ce74d74539ce0baef4a36198081dfb0265c Mon Sep 17 00:00:00 2001
From: Marc Mutz <marc.mutz@qt.io>
Date: Fri, 14 Mar 2025 18:29:20 +0100
Subject: [PATCH] ECMEnableSanitizers.cmake: fix GCC's "note: variable tracking
size limit exceeded" when using asan
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Set the max-vartrack-size parameter to 0 (= unlimited) to avoid GCC's
"note: variable tracking size limit exceeded with
-fvar-tracking-assignments, retrying without" message you get when you
compile with asan sometimes.
This is reported¹ to speed up compilation, not slow it down.
¹ https://stackoverflow.com/a/75704837/134841
---
modules/ECMEnableSanitizers.cmake | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/modules/ECMEnableSanitizers.cmake b/modules/ECMEnableSanitizers.cmake
index 07db1c80..45236e6d 100644
--- a/modules/ECMEnableSanitizers.cmake
+++ b/modules/ECMEnableSanitizers.cmake
@@ -117,6 +117,16 @@ macro (enable_sanitizer_flags sanitize_option)
set(XSAN_COMPILE_FLAGS "-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls")
set(XSAN_LINKER_FLAGS "asan")
endif()
+ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+ # fixes "note: variable tracking size limit exceeded with
+ # -fvar-tracking-assignments, retrying without" (which is
+ # another way of saying "I'll go ahead and compile this
+ # thing _twice_") by making it unlimited
+ # Reference:
+ # https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
+ # -> max-vartrack-size
+ string(APPEND XSAN_COMPILE_FLAGS " --param=max-vartrack-size=0")
+ endif ()
elseif (${sanitize_option} MATCHES "thread")
check_compiler_version("4.8" "3.1" "99.99")
set(XSAN_COMPILE_FLAGS "-fsanitize=thread")
--
2.25.1

View File

@ -0,0 +1,42 @@
From 8907023584ea0936893269aee890af5995746af5 Mon Sep 17 00:00:00 2001
From: Marc Mutz <marc.mutz@qt.io>
Date: Mon, 17 Mar 2025 10:15:03 +0100
Subject: [PATCH] ECMEnableSanitizers.cmake: replace tabs with spaces
Amends cbda7ce74d74539ce0baef4a36198081dfb0265c.
---
modules/ECMEnableSanitizers.cmake | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/modules/ECMEnableSanitizers.cmake b/modules/ECMEnableSanitizers.cmake
index 45236e6d..8686384d 100644
--- a/modules/ECMEnableSanitizers.cmake
+++ b/modules/ECMEnableSanitizers.cmake
@@ -118,15 +118,15 @@ macro (enable_sanitizer_flags sanitize_option)
set(XSAN_LINKER_FLAGS "asan")
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
- # fixes "note: variable tracking size limit exceeded with
- # -fvar-tracking-assignments, retrying without" (which is
- # another way of saying "I'll go ahead and compile this
- # thing _twice_") by making it unlimited
- # Reference:
- # https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
- # -> max-vartrack-size
- string(APPEND XSAN_COMPILE_FLAGS " --param=max-vartrack-size=0")
- endif ()
+ # fixes "note: variable tracking size limit exceeded with
+ # -fvar-tracking-assignments, retrying without" (which is
+ # another way of saying "I'll go ahead and compile this
+ # thing _twice_") by making it unlimited
+ # Reference:
+ # https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
+ # -> max-vartrack-size
+ string(APPEND XSAN_COMPILE_FLAGS " --param=max-vartrack-size=0")
+ endif ()
elseif (${sanitize_option} MATCHES "thread")
check_compiler_version("4.8" "3.1" "99.99")
set(XSAN_COMPILE_FLAGS "-fsanitize=thread")
--
2.25.1

View File

@ -118,6 +118,16 @@ macro (enable_sanitizer_flags sanitize_option)
set(XSAN_COMPILE_FLAGS "-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls")
set(XSAN_LINKER_FLAGS "asan")
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
# fixes "note: variable tracking size limit exceeded with
# -fvar-tracking-assignments, retrying without" (which is
# another way of saying "I'll go ahead and compile this
# thing _twice_") by making it unlimited
# Reference:
# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
# -> max-vartrack-size
string(APPEND XSAN_COMPILE_FLAGS " --param=max-vartrack-size=0")
endif ()
elseif (${sanitize_option} MATCHES "thread")
check_compiler_version("4.8" "3.1" "99.99")
set(XSAN_COMPILE_FLAGS "-fsanitize=thread")