forked from OSchip/llvm-project
clang-cl: Diagnose the usage of ASAN with a debug runtime library
Summary: AddressSanitizer currently doesn't support this configuration, and binaries built with it will just get into an infinite loop during startup. Test Plan: Includes an automated test. Reviewers: samsonov Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D5764 llvm-svn: 219744
This commit is contained in:
parent
752b789e7b
commit
e0db196556
|
@ -163,9 +163,11 @@ def warn_debug_compression_unavailable : Warning<"cannot compress debug sections
|
|||
|
||||
def note_drv_command_failed_diag_msg : Note<
|
||||
"diagnostic msg: %0">;
|
||||
def note_drv_t_option_is_global :
|
||||
Note<"The last /TC or /TP option takes precedence over earlier instances">;
|
||||
|
||||
def note_drv_t_option_is_global : Note<
|
||||
"The last /TC or /TP option takes precedence over earlier instances">;
|
||||
def note_drv_address_sanitizer_debug_runtime : Note<
|
||||
"AddressSanitizer doesn't support linking with debug runtime libraries yet">;
|
||||
|
||||
def err_analyzer_config_no_value : Error<
|
||||
"analyzer-config option '%0' has a key but no value">;
|
||||
def err_analyzer_config_multiple_values : Error<
|
||||
|
|
|
@ -174,6 +174,21 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
|
|||
D.Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << S;
|
||||
}
|
||||
}
|
||||
|
||||
if (Arg *WindowsDebugRTArg =
|
||||
Args.getLastArg(options::OPT__SLASH_MTd, options::OPT__SLASH_MT,
|
||||
options::OPT__SLASH_MDd, options::OPT__SLASH_MD,
|
||||
options::OPT__SLASH_LDd, options::OPT__SLASH_LD)) {
|
||||
switch (WindowsDebugRTArg->getOption().getID()) {
|
||||
case options::OPT__SLASH_MTd:
|
||||
case options::OPT__SLASH_MDd:
|
||||
case options::OPT__SLASH_LDd:
|
||||
D.Diag(diag::err_drv_argument_not_allowed_with)
|
||||
<< WindowsDebugRTArg->getAsString(Args)
|
||||
<< lastArgumentForKind(D, Args, NeedsAsanRt);
|
||||
D.Diag(diag::note_drv_address_sanitizer_debug_runtime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Parse -link-cxx-sanitizer flag.
|
||||
|
|
|
@ -153,3 +153,21 @@
|
|||
|
||||
// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=function -fsanitize=undefined %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-FSAN-UBSAN-DARWIN
|
||||
// CHECK-FSAN-UBSAN-DARWIN: unsupported option '-fsanitize=function' for target 'x86_64-apple-darwin10'
|
||||
|
||||
// RUN: %clang_cl -fsanitize=address -c -MDd -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-DEBUGRTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -MTd -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-DEBUGRTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -LDd -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-DEBUGRTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -MD -MDd -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-DEBUGRTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -MT -MTd -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-DEBUGRTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -LD -LDd -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-DEBUGRTL
|
||||
// CHECK-ASAN-DEBUGRTL: error: invalid argument
|
||||
// CHECK-ASAN-DEBUGRTL: not allowed with '-fsanitize=address'
|
||||
// CHECK-ASAN-DEBUGRTL: note: AddressSanitizer doesn't support linking with debug runtime libraries yet
|
||||
|
||||
// RUN: %clang_cl -fsanitize=address -c -MT -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-RELEASERTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -MD -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-RELEASERTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -LD -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-RELEASERTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -MTd -MT -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-RELEASERTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -MDd -MD -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-RELEASERTL
|
||||
// RUN: %clang_cl -fsanitize=address -c -LDd -LD -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-RELEASERTL
|
||||
// CHECK-ASAN-RELEASERTL-NOT: error: invalid argument
|
||||
|
|
Loading…
Reference in New Issue