Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit 13a5489

Browse files
committed
[MSan] Add flag to disable use-after-dtor.
Summary: Flag is -fno-sanitize-use-after-dtor. Reviewers: vitalybuka, eugenis, kcc Reviewed By: vitalybuka, eugenis Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D37867 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@313314 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 98226af commit 13a5489

File tree

4 files changed

+17
-4
lines changed

4 files changed

+17
-4
lines changed

include/clang/Driver/Options.td

+3
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,9 @@ def fno_sanitize_memory_track_origins : Flag<["-"], "fno-sanitize-memory-track-o
851851
def fsanitize_memory_use_after_dtor : Flag<["-"], "fsanitize-memory-use-after-dtor">,
852852
Group<f_clang_Group>,
853853
HelpText<"Enable use-after-destroy detection in MemorySanitizer">;
854+
def fno_sanitize_memory_use_after_dtor : Flag<["-"], "fno-sanitize-memory-use-after-dtor">,
855+
Group<f_clang_Group>,
856+
HelpText<"Disable use-after-destroy detection in MemorySanitizer">;
854857
def fsanitize_address_field_padding : Joined<["-"], "fsanitize-address-field-padding=">,
855858
Group<f_clang_Group>,
856859
HelpText<"Level of field padding for AddressSanitizer">;

lib/Driver/SanitizerArgs.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,9 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
489489
}
490490
}
491491
MsanUseAfterDtor =
492-
Args.hasArg(options::OPT_fsanitize_memory_use_after_dtor);
492+
Args.hasFlag(options::OPT_fsanitize_memory_use_after_dtor,
493+
options::OPT_fno_sanitize_memory_use_after_dtor,
494+
false);
493495
NeedPIE |= !(TC.getTriple().isOSLinux() &&
494496
TC.getTriple().getArch() == llvm::Triple::x86_64);
495497
}

lib/Frontend/CompilerInvocation.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -830,7 +830,9 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
830830
Opts.SanitizeMemoryTrackOrigins =
831831
getLastArgIntValue(Args, OPT_fsanitize_memory_track_origins_EQ, 0, Diags);
832832
Opts.SanitizeMemoryUseAfterDtor =
833-
Args.hasArg(OPT_fsanitize_memory_use_after_dtor);
833+
Args.hasFlag(OPT_fsanitize_memory_use_after_dtor,
834+
OPT_fno_sanitize_memory_use_after_dtor,
835+
false);
834836
Opts.SanitizeMinimalRuntime = Args.hasArg(OPT_fsanitize_minimal_runtime);
835837
Opts.SanitizeCfiCrossDso = Args.hasArg(OPT_fsanitize_cfi_cross_dso);
836838
Opts.SanitizeStats = Args.hasArg(OPT_fsanitize_stats);

test/Driver/fsanitize.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,14 @@
172172
// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory -fsanitize-memory-track-origins=3 -pie %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-TRACK-ORIGINS-3
173173
// CHECK-TRACK-ORIGINS-3: error: invalid value '3' in '-fsanitize-memory-track-origins=3'
174174

175-
// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory -fsanitize-memory-use-after-dtor -pie %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MSAN-USE-AFTER-DTOR
176-
// CHECK-MSAN-USE-AFTER-DTOR: -cc1{{.*}}-fsanitize-memory-use-after-dtor
175+
// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory -fsanitize-memory-use-after-dtor %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-USE-AFTER-DTOR
176+
// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory -fno-sanitize-memory-use-after-dtor -fsanitize-memory-use-after-dtor %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-USE-AFTER-DTOR
177+
// CHECK-USE-AFTER-DTOR: -cc1{{.*}}-fsanitize-memory-use-after-dtor
178+
179+
// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory -fno-sanitize-memory-use-after-dtor %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-USE-AFTER-DTOR-OFF
180+
// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory -fsanitize-memory-use-after-dtor -fno-sanitize-memory-use-after-dtor %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-USE-AFTER-DTOR-OFF
181+
// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-USE-AFTER-DTOR-OFF
182+
// CHECK-USE-AFTER-DTOR-OFF-NOT: -cc1{{.*}}memory-use-after-dtor
177183

178184
// RUN: %clang -target x86_64-linux-gnu -fsanitize=address -fsanitize-address-field-padding=0 %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ASAN-FIELD-PADDING-0
179185
// CHECK-ASAN-FIELD-PADDING-0-NOT: -fsanitize-address-field-padding

0 commit comments

Comments
 (0)