From 0174ce4ce17cf7d37a9dcc5ab43fe64296d095fb Mon Sep 17 00:00:00 2001 From: Ritanya B Bharadwaj Date: Tue, 18 Jun 2024 09:18:27 -0500 Subject: [PATCH] [clang] Emitting a warning if optimizations are enabled with sanitizers --- clang/include/clang/Basic/DiagnosticDriverKinds.td | 2 ++ clang/lib/Driver/ToolChains/Clang.cpp | 6 ++++++ clang/test/Driver/fsanitize.c | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 1ca2cb85565a1..bd254bcaf5d97 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -477,6 +477,8 @@ def warn_drv_disabling_vptr_no_rtti_default : Warning< def warn_drv_object_size_disabled_O0 : Warning< "the object size sanitizer has no effect at -O0, but is explicitly enabled: %0">, InGroup, DefaultWarnNoWerror; +def warn_sanitizer_with_optimization : Warning< + "enabling optimizations with sanitizers may potentially reduce effectiveness">; def warn_ignoring_verify_debuginfo_preserve_export : Warning< "ignoring -fverify-debuginfo-preserve-export=%0 because " "-fverify-debuginfo-preserve wasn't enabled">, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 331cf6e713d89..2d72b3eb62308 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -6208,6 +6208,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, PScpu::addProfileRTArgs(TC, Args, CmdArgs); PScpu::addSanitizerArgs(TC, Args, CmdArgs); } + + // Emit a warning if optimizations are enabled with sanitizers + if (Args.hasArg(options::OPT_fsanitize_EQ) && + (Args.hasArg(options::OPT_Ofast) || Args.hasArg(options::OPT_O))) { + D.Diag(diag::warn_sanitizer_with_optimization); + } // Pass options for controlling the default header search paths. if (Args.hasArg(options::OPT_nostdinc)) { diff --git a/clang/test/Driver/fsanitize.c b/clang/test/Driver/fsanitize.c index 08e9c78f9d1d2..5657bb9a6da26 100644 --- a/clang/test/Driver/fsanitize.c +++ b/clang/test/Driver/fsanitize.c @@ -1038,3 +1038,10 @@ // RUN: not %clang --target=aarch64-none-elf -fsanitize=dataflow %s -### 2>&1 | FileCheck %s -check-prefix=UNSUPPORTED-BAREMETAL // RUN: not %clang --target=arm-arm-none-eabi -fsanitize=shadow-call-stack %s -### 2>&1 | FileCheck %s -check-prefix=UNSUPPORTED-BAREMETAL // UNSUPPORTED-BAREMETAL: unsupported option '-fsanitize={{.*}}' for target + +// RUN: %clang -O0 -O1 -fsanitize=address %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-SAN-OPT-WARN +// RUN: %clang -Ofast -fsanitize=address %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-SAN-OPT-WARN +// RUN: %clang -O3 -fsanitize=address %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-SAN-OPT-WARN +// RUN: %clang -O2 -fsanitize=thread %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-SAN-OPT-WARN +// RUN: %clang -O1 -fsanitize=thread %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-SAN-OPT-WARN +// CHECK-SAN-OPT-WARN: warning: enabling optimizations with sanitizers may potentially reduce effectiveness