Index: lib/asan/asan_flags.inc =================================================================== --- lib/asan/asan_flags.inc +++ lib/asan/asan_flags.inc @@ -46,8 +46,6 @@ "If set, uses custom wrappers for memset/memcpy/memmove intrinsics.") ASAN_FLAG(bool, detect_stack_use_after_return, false, "Enables stack-use-after-return checking at run-time.") -ASAN_FLAG(bool, detect_stack_use_after_scope, true, - "Enables stack-use-after-scope checking at run-time.") ASAN_FLAG(int, min_uar_stack_size_log, 16, // We can't do smaller anyway. "Minimum fake stack size log.") ASAN_FLAG(int, max_uar_stack_size_log, Index: lib/asan/asan_interface_internal.h =================================================================== --- lib/asan/asan_interface_internal.h +++ lib/asan/asan_interface_internal.h @@ -174,10 +174,6 @@ SANITIZER_INTERFACE_ATTRIBUTE extern int __asan_option_detect_stack_use_after_return; -// Global flag, copy of ASAN_OPTIONS=detect_stack_use_after_scope - SANITIZER_INTERFACE_ATTRIBUTE - extern int __asan_option_detect_stack_use_after_scope; - SANITIZER_INTERFACE_ATTRIBUTE extern uptr *__asan_test_only_reported_buggy_pointer; Index: lib/asan/asan_poisoning.cc =================================================================== --- lib/asan/asan_poisoning.cc +++ lib/asan/asan_poisoning.cc @@ -339,13 +339,11 @@ } void __asan_poison_stack_memory(uptr addr, uptr size) { - if (!__asan_option_detect_stack_use_after_scope) return; VReport(1, "poisoning: %p %zx\n", (void *)addr, size); PoisonAlignedStackMemory(addr, size, true); } void __asan_unpoison_stack_memory(uptr addr, uptr size) { - if (!__asan_option_detect_stack_use_after_scope) return; VReport(1, "unpoisoning: %p %zx\n", (void *)addr, size); PoisonAlignedStackMemory(addr, size, false); } Index: lib/asan/asan_rtl.cc =================================================================== --- lib/asan/asan_rtl.cc +++ lib/asan/asan_rtl.cc @@ -33,7 +33,6 @@ #include "ubsan/ubsan_platform.h" int __asan_option_detect_stack_use_after_return; // Global interface symbol. -int __asan_option_detect_stack_use_after_scope; // Global interface symbol. uptr *__asan_test_only_reported_buggy_pointer; // Used only for testing asan. namespace __asan { @@ -446,9 +445,6 @@ __asan_option_detect_stack_use_after_return = flags()->detect_stack_use_after_return; - __asan_option_detect_stack_use_after_scope = - flags()->detect_stack_use_after_scope; - // Re-exec ourselves if we need to set additional env or command line args. MaybeReexec(); Index: lib/asan/asan_win.cc =================================================================== --- lib/asan/asan_win.cc +++ lib/asan/asan_win.cc @@ -37,12 +37,6 @@ return __asan_option_detect_stack_use_after_return; } -SANITIZER_INTERFACE_ATTRIBUTE -int __asan_should_detect_stack_use_after_scope() { - __asan_init(); - return __asan_option_detect_stack_use_after_scope; -} - // -------------------- A workaround for the absence of weak symbols ----- {{{ // We don't have a direct equivalent of weak symbols when using MSVC, but we can // use the /alternatename directive to tell the linker to default a specific Index: lib/asan/asan_win_dll_thunk.cc =================================================================== --- lib/asan/asan_win_dll_thunk.cc +++ lib/asan/asan_win_dll_thunk.cc @@ -198,11 +198,9 @@ // Don't use the INTERFACE_FUNCTION machinery for this function as we actually // want to call it in the __asan_init interceptor. WRAP_W_V(__asan_should_detect_stack_use_after_return) -WRAP_W_V(__asan_should_detect_stack_use_after_scope) extern "C" { int __asan_option_detect_stack_use_after_return; - int __asan_option_detect_stack_use_after_scope; // Manually wrap __asan_init as we need to initialize // __asan_option_detect_stack_use_after_return afterwards. @@ -216,8 +214,6 @@ fn(); __asan_option_detect_stack_use_after_return = (__asan_should_detect_stack_use_after_return() != 0); - __asan_option_detect_stack_use_after_scope = - (__asan_should_detect_stack_use_after_scope() != 0); InterceptHooks(); } Index: lib/asan/asan_win_dynamic_runtime_thunk.cc =================================================================== --- lib/asan/asan_win_dynamic_runtime_thunk.cc +++ lib/asan/asan_win_dynamic_runtime_thunk.cc @@ -15,7 +15,6 @@ // // This includes: // - forwarding the detect_stack_use_after_return runtime option -// - forwarding the detect_stack_use_after_scope runtime option // - working around deficiencies of the MD runtime // - installing a custom SEH handler // @@ -52,23 +51,6 @@ } //////////////////////////////////////////////////////////////////////////////// -// Define a copy of __asan_option_detect_stack_use_after_scope that should be -// used when linking an MD runtime with a set of object files on Windows. -// -// The ASan MD runtime dllexports '__asan_option_detect_stack_use_after_scope', -// so normally we would just dllimport it. Unfortunately, the dllimport -// attribute adds __imp_ prefix to the symbol name of a variable. -// Since in general we don't know if a given TU is going to be used -// with a MT or MD runtime and we don't want to use ugly __imp_ names on Windows -// just to work around this issue, let's clone the variable that is constant -// after initialization anyways. -extern "C" { -__declspec(dllimport) int __asan_should_detect_stack_use_after_scope(); -int __asan_option_detect_stack_use_after_scope = - __asan_should_detect_stack_use_after_scope(); -} - -//////////////////////////////////////////////////////////////////////////////// // For some reason, the MD CRT doesn't call the C/C++ terminators during on DLL // unload or on exit. ASan relies on LLVM global_dtors to call // __asan_unregister_globals on these events, which unfortunately doesn't work Index: test/asan/TestCases/use-after-scope-types.cc =================================================================== --- test/asan/TestCases/use-after-scope-types.cc +++ test/asan/TestCases/use-after-scope-types.cc @@ -1,17 +1,15 @@ // RUN: %clangxx_asan %stdcxx11 -O0 -fsanitize-address-use-after-scope %s -o %t -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 0 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 1 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 2 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 3 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 4 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 5 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 6 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 7 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 8 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 9 2>&1 | FileCheck %s -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 10 2>&1 | FileCheck %s - -// RUN: %env_asan_opts=detect_stack_use_after_scope=0 %run %t 11 +// RUN: not %run %t 0 2>&1 | FileCheck %s +// RUN: not %run %t 1 2>&1 | FileCheck %s +// RUN: not %run %t 2 2>&1 | FileCheck %s +// RUN: not %run %t 3 2>&1 | FileCheck %s +// RUN: not %run %t 4 2>&1 | FileCheck %s +// RUN: not %run %t 5 2>&1 | FileCheck %s +// RUN: not %run %t 6 2>&1 | FileCheck %s +// RUN: not %run %t 7 2>&1 | FileCheck %s +// RUN: not %run %t 8 2>&1 | FileCheck %s +// RUN: not %run %t 9 2>&1 | FileCheck %s +// RUN: not %run %t 10 2>&1 | FileCheck %s #include #include Index: test/asan/TestCases/use-after-scope.cc =================================================================== --- test/asan/TestCases/use-after-scope.cc +++ test/asan/TestCases/use-after-scope.cc @@ -1,7 +1,5 @@ // RUN: %clangxx_asan -O1 -fsanitize-address-use-after-scope %s -o %t && \ -// RUN: %env_asan_opts=detect_stack_use_after_scope=1 not %run %t 2>&1 | FileCheck %s - -// RUN: %env_asan_opts=detect_stack_use_after_scope=0 %run %t +// RUN: not %run %t 2>&1 | FileCheck %s volatile int *p = 0;