forked from OSchip/llvm-project
Driver: only produce CFI -fvisibility= error when compiling.
The -fvisibility= flag only affects compile jobs, so there's no need to error out because of it if we aren't compiling (e.g. if we are only linking). llvm-svn: 267824
This commit is contained in:
parent
893110ecaf
commit
f10237b689
|
@ -561,14 +561,6 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
|
||||||
LinkCXXRuntimes =
|
LinkCXXRuntimes =
|
||||||
Args.hasArg(options::OPT_fsanitize_link_cxx_runtime) || D.CCCIsCXX();
|
Args.hasArg(options::OPT_fsanitize_link_cxx_runtime) || D.CCCIsCXX();
|
||||||
|
|
||||||
// Require -fvisibility= flag on non-Windows if vptr CFI is enabled.
|
|
||||||
if ((Kinds & CFIClasses) && !TC.getTriple().isOSWindows() &&
|
|
||||||
!Args.hasArg(options::OPT_fvisibility_EQ)) {
|
|
||||||
D.Diag(clang::diag::err_drv_argument_only_allowed_with)
|
|
||||||
<< lastArgumentForMask(D, Args, Kinds & CFIClasses)
|
|
||||||
<< "-fvisibility=";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally, initialize the set of available and recoverable sanitizers.
|
// Finally, initialize the set of available and recoverable sanitizers.
|
||||||
Sanitizers.Mask |= Kinds;
|
Sanitizers.Mask |= Kinds;
|
||||||
RecoverableSanitizers.Mask |= RecoverableKinds;
|
RecoverableSanitizers.Mask |= RecoverableKinds;
|
||||||
|
@ -690,6 +682,16 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
|
||||||
TC.getCompilerRT(Args, "stats")));
|
TC.getCompilerRT(Args, "stats")));
|
||||||
addIncludeLinkerOption(TC, Args, CmdArgs, "__sanitizer_stats_register");
|
addIncludeLinkerOption(TC, Args, CmdArgs, "__sanitizer_stats_register");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Require -fvisibility= flag on non-Windows when compiling if vptr CFI is
|
||||||
|
// enabled.
|
||||||
|
if (Sanitizers.hasOneOf(CFIClasses) && !TC.getTriple().isOSWindows() &&
|
||||||
|
!Args.hasArg(options::OPT_fvisibility_EQ)) {
|
||||||
|
TC.getDriver().Diag(clang::diag::err_drv_argument_only_allowed_with)
|
||||||
|
<< lastArgumentForMask(TC.getDriver(), Args,
|
||||||
|
Sanitizers.Mask & CFIClasses)
|
||||||
|
<< "-fvisibility=";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SanitizerMask parseArgValues(const Driver &D, const llvm::opt::Arg *A,
|
SanitizerMask parseArgValues(const Driver &D, const llvm::opt::Arg *A,
|
||||||
|
|
|
@ -309,8 +309,10 @@
|
||||||
// RUN: %clang -target x86_64-linux-gnu -flto -fsanitize=cfi-derived-cast -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-NOVIS
|
// RUN: %clang -target x86_64-linux-gnu -flto -fsanitize=cfi-derived-cast -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-NOVIS
|
||||||
// CHECK-CFI-NOVIS: '-fsanitize=cfi-derived-cast' only allowed with '-fvisibility='
|
// CHECK-CFI-NOVIS: '-fsanitize=cfi-derived-cast' only allowed with '-fvisibility='
|
||||||
|
|
||||||
// RUN: %clang -target x86_64-pc-win32 -flto -fsanitize=cfi-derived-cast -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-NOVIS-WIN
|
// RUN: %clang -target x86_64-pc-win32 -flto -fsanitize=cfi-derived-cast -c %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-NOVIS-NOERROR
|
||||||
// CHECK-CFI-NOVIS-WIN-NOT: only allowed with
|
// RUN: echo > %t.o
|
||||||
|
// RUN: %clang -target x86_64-linux-gnu -flto -fsanitize=cfi-derived-cast %t.o -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-NOVIS-NOERROR
|
||||||
|
// CHECK-CFI-NOVIS-NOERROR-NOT: only allowed with
|
||||||
|
|
||||||
// RUN: %clang -target mips-unknown-linux -fsanitize=cfi-icall %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-ICALL-MIPS
|
// RUN: %clang -target mips-unknown-linux -fsanitize=cfi-icall %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-ICALL-MIPS
|
||||||
// CHECK-CFI-ICALL-MIPS: unsupported option '-fsanitize=cfi-icall' for target 'mips-unknown-linux'
|
// CHECK-CFI-ICALL-MIPS: unsupported option '-fsanitize=cfi-icall' for target 'mips-unknown-linux'
|
||||||
|
|
Loading…
Reference in New Issue