Index: cfe/trunk/lib/Driver/ToolChains.h =================================================================== --- cfe/trunk/lib/Driver/ToolChains.h +++ cfe/trunk/lib/Driver/ToolChains.h @@ -496,6 +496,8 @@ return TargetVersion < VersionTuple(V0, V1, V2); } + StringRef getOSLibraryNameSuffix() const; + public: /// } /// @name ToolChain Implementation Index: cfe/trunk/lib/Driver/ToolChains.cpp =================================================================== --- cfe/trunk/lib/Driver/ToolChains.cpp +++ cfe/trunk/lib/Driver/ToolChains.cpp @@ -319,6 +319,26 @@ } } +StringRef Darwin::getOSLibraryNameSuffix() const { + switch(TargetPlatform) { + case DarwinPlatformKind::MacOS: + return "osx"; + case DarwinPlatformKind::IPhoneOS: + return "ios"; + case DarwinPlatformKind::IPhoneOSSimulator: + return "iossim"; + case DarwinPlatformKind::TvOS: + return "tvos"; + case DarwinPlatformKind::TvOSSimulator: + return "tvossim"; + case DarwinPlatformKind::WatchOS: + return "watchos"; + case DarwinPlatformKind::WatchOSSimulator: + return "watchossim"; + } + llvm_unreachable("Unsupported platform"); +} + void Darwin::addProfileRTLibs(const ArgList &Args, ArgStringList &CmdArgs) const { if (!needsProfileRT(Args)) return; @@ -363,12 +383,11 @@ // Sanitizer runtime libraries requires C++. AddCXXStdlibLibArgs(Args, CmdArgs); } - // ASan is not supported on watchOS. - assert(isTargetMacOS() || isTargetIOSSimulator()); - StringRef OS = isTargetMacOS() ? "osx" : "iossim"; + AddLinkRuntimeLib( Args, CmdArgs, - (Twine("libclang_rt.") + Sanitizer + "_" + OS + "_dynamic.dylib").str(), + (Twine("libclang_rt.") + Sanitizer + "_" + + getOSLibraryNameSuffix() + "_dynamic.dylib").str(), /*AlwaysLink*/ true, /*IsEmbedded*/ false, /*AddRPath*/ true); @@ -1221,8 +1240,7 @@ SanitizerMask Darwin::getSupportedSanitizers() const { SanitizerMask Res = ToolChain::getSupportedSanitizers(); - if (isTargetMacOS() || isTargetIOSSimulator()) - Res |= SanitizerKind::Address; + Res |= SanitizerKind::Address; if (isTargetMacOS()) { if (!isMacosxVersionLT(10, 9)) Res |= SanitizerKind::Vptr; Index: cfe/trunk/test/Driver/darwin-sanitizer-ld.c =================================================================== --- cfe/trunk/test/Driver/darwin-sanitizer-ld.c +++ cfe/trunk/test/Driver/darwin-sanitizer-ld.c @@ -11,16 +11,6 @@ // CHECK-ASAN: "-rpath" "{{.*}}lib{{.*}}darwin" // RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \ -// RUN: -fsanitize=address -mios-simulator-version-min=7.0 %s -o %t.o 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-ASAN-IOSSIM %s - -// CHECK-ASAN-IOSSIM: "{{.*}}ld{{(.exe)?}}" -// CHECK-ASAN-IOSSIM: lc++ -// CHECK-ASAN-IOSSIM: libclang_rt.asan_iossim_dynamic.dylib" -// CHECK-ASAN-IOSSIM: "-rpath" "@executable_path" -// CHECK-ASAN-IOSSIM: "-rpath" "{{.*}}lib{{.*}}darwin" - -// RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \ // RUN: -fPIC -shared -fsanitize=address %s -o %t.so 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-DYN-ASAN %s @@ -65,3 +55,63 @@ // CHECK-DYN-BOUNDS: "{{.*}}ld{{(.exe)?}}" // CHECK-DYN-BOUNDS-NOT: ubsan_osx + +// RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \ +// RUN: -fsanitize=address -mios-simulator-version-min=7.0 %s -o %t.o 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ASAN-IOSSIM %s + +// CHECK-ASAN-IOSSIM: "{{.*}}ld{{(.exe)?}}" +// CHECK-ASAN-IOSSIM: lc++ +// CHECK-ASAN-IOSSIM: libclang_rt.asan_iossim_dynamic.dylib" +// CHECK-ASAN-IOSSIM: "-rpath" "@executable_path" +// CHECK-ASAN-IOSSIM: "-rpath" "{{.*}}lib{{.*}}darwin" + +// RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \ +// RUN: -fsanitize=address -mtvos-simulator-version-min=8.3.0 %s -o %t.o 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ASAN-TVOSSIM %s + +// CHECK-ASAN-TVOSSIM: "{{.*}}ld{{(.exe)?}}" +// CHECK-ASAN-TVOSSIM: lc++ +// CHECK-ASAN-TVOSSIM: libclang_rt.asan_tvossim_dynamic.dylib" +// CHECK-ASAN-TVOSSIM: "-rpath" "@executable_path" +// CHECK-ASAN-TVOSSIM: "-rpath" "{{.*}}lib{{.*}}darwin" + +// RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \ +// RUN: -fsanitize=address -mwatchos-simulator-version-min=2.0.0 %s -o %t.o 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ASAN-WATCHOSSIM %s + +// CHECK-ASAN-WATCHOSSIM: "{{.*}}ld{{(.exe)?}}" +// CHECK-ASAN-WATCHOSSIM: lc++ +// CHECK-ASAN-WATCHOSSIM: libclang_rt.asan_watchossim_dynamic.dylib" +// CHECK-ASAN-WATCHOSSIM: "-rpath" "@executable_path" +// CHECK-ASAN-WATCHOSSIM: "-rpath" "{{.*}}lib{{.*}}darwin" + +// RUN: %clang -no-canonical-prefixes -### -target armv7-apple-ios \ +// RUN: -fsanitize=address -miphoneos-version-min=7 %s -o %t.o 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ASAN-IOS %s + +// CHECK-ASAN-IOS: "{{.*}}ld{{(.exe)?}}" +// CHECK-ASAN-IOS: lc++ +// CHECK-ASAN-IOS: libclang_rt.asan_ios_dynamic.dylib" +// CHECK-ASAN-IOS: "-rpath" "@executable_path" +// CHECK-ASAN-IOS: "-rpath" "{{.*}}lib{{.*}}darwin" + +// RUN: %clang -no-canonical-prefixes -### -target arm64-apple-tvos \ +// RUN: -fsanitize=address -mtvos-version-min=8.3 %s -o %t.o 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ASAN-TVOS %s + +// CHECK-ASAN-TVOS: "{{.*}}ld{{(.exe)?}}" +// CHECK-ASAN-TVOS: lc++ +// CHECK-ASAN-TVOS: libclang_rt.asan_tvos_dynamic.dylib" +// CHECK-ASAN-TVOS: "-rpath" "@executable_path" +// CHECK-ASAN-TVOS: "-rpath" "{{.*}}lib{{.*}}darwin" + +// RUN: %clang -no-canonical-prefixes -### -target armv7k-apple-watchos \ +// RUN: -fsanitize=address -mwatchos-version-min=2.0 %s -o %t.o 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-ASAN-WATCHOS %s + +// CHECK-ASAN-WATCHOS: "{{.*}}ld{{(.exe)?}}" +// CHECK-ASAN-WATCHOS: lc++ +// CHECK-ASAN-WATCHOS: libclang_rt.asan_watchos_dynamic.dylib" +// CHECK-ASAN-WATCHOS: "-rpath" "@executable_path" +// CHECK-ASAN-WATCHOS: "-rpath" "{{.*}}lib{{.*}}darwin" Index: cfe/trunk/test/Driver/fsanitize.c =================================================================== --- cfe/trunk/test/Driver/fsanitize.c +++ cfe/trunk/test/Driver/fsanitize.c @@ -230,7 +230,7 @@ // CHECK-VPTR-DARWIN-NEW: -fsanitize=alignment,vptr // RUN: %clang -target armv7-apple-ios7 -miphoneos-version-min=7.0 -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ASAN-IOS -// CHECK-ASAN-IOS: unsupported option '-fsanitize=address' for target 'arm-apple-ios7' +// CHECK-ASAN-IOS: -fsanitize=address // RUN: %clang -target i386-pc-openbsd -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-ASAN-OPENBSD // CHECK-ASAN-OPENBSD: unsupported option '-fsanitize=address' for target 'i386-pc-openbsd'