@@ -77,17 +77,18 @@ enum CoverageFeature {
77
77
CoverageBB = 1 << 1 ,
78
78
CoverageEdge = 1 << 2 ,
79
79
CoverageIndirCall = 1 << 3 ,
80
- CoverageTraceBB = 1 << 4 , // Deprecated.
80
+ CoverageTraceBB = 1 << 4 , // Deprecated.
81
81
CoverageTraceCmp = 1 << 5 ,
82
82
CoverageTraceDiv = 1 << 6 ,
83
83
CoverageTraceGep = 1 << 7 ,
84
- Coverage8bitCounters = 1 << 8 , // Deprecated.
84
+ Coverage8bitCounters = 1 << 8 , // Deprecated.
85
85
CoverageTracePC = 1 << 9 ,
86
86
CoverageTracePCGuard = 1 << 10 ,
87
87
CoverageNoPrune = 1 << 11 ,
88
88
CoverageInline8bitCounters = 1 << 12 ,
89
89
CoveragePCTable = 1 << 13 ,
90
90
CoverageStackDepth = 1 << 14 ,
91
+ CoverageInlineBoolFlag = 1 << 15 ,
91
92
};
92
93
93
94
// / Parse a -fsanitize= or -fno-sanitize= argument's values, diagnosing any
@@ -723,8 +724,9 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
723
724
<< " -fsanitize-coverage=trace-pc-guard" ;
724
725
725
726
int InsertionPointTypes = CoverageFunc | CoverageBB | CoverageEdge;
726
- int InstrumentationTypes =
727
- CoverageTracePC | CoverageTracePCGuard | CoverageInline8bitCounters;
727
+ int InstrumentationTypes = CoverageTracePC | CoverageTracePCGuard |
728
+ CoverageInline8bitCounters |
729
+ CoverageInlineBoolFlag;
728
730
if ((CoverageFeatures & InsertionPointTypes) &&
729
731
!(CoverageFeatures & InstrumentationTypes)) {
730
732
D.Diag (clang::diag::warn_drv_deprecated_arg)
@@ -735,7 +737,8 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
735
737
// trace-pc w/o func/bb/edge implies edge.
736
738
if (!(CoverageFeatures & InsertionPointTypes)) {
737
739
if (CoverageFeatures &
738
- (CoverageTracePC | CoverageTracePCGuard | CoverageInline8bitCounters))
740
+ (CoverageTracePC | CoverageTracePCGuard | CoverageInline8bitCounters |
741
+ CoverageInlineBoolFlag))
739
742
CoverageFeatures |= CoverageEdge;
740
743
741
744
if (CoverageFeatures & CoverageStackDepth)
@@ -907,21 +910,25 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
907
910
// Do it even if Sanitizers.empty() since some forms of coverage don't require
908
911
// sanitizers.
909
912
std::pair<int , const char *> CoverageFlags[] = {
910
- std::make_pair (CoverageFunc, " -fsanitize-coverage-type=1" ),
911
- std::make_pair (CoverageBB, " -fsanitize-coverage-type=2" ),
912
- std::make_pair (CoverageEdge, " -fsanitize-coverage-type=3" ),
913
- std::make_pair (CoverageIndirCall, " -fsanitize-coverage-indirect-calls" ),
914
- std::make_pair (CoverageTraceBB, " -fsanitize-coverage-trace-bb" ),
915
- std::make_pair (CoverageTraceCmp, " -fsanitize-coverage-trace-cmp" ),
916
- std::make_pair (CoverageTraceDiv, " -fsanitize-coverage-trace-div" ),
917
- std::make_pair (CoverageTraceGep, " -fsanitize-coverage-trace-gep" ),
918
- std::make_pair (Coverage8bitCounters, " -fsanitize-coverage-8bit-counters" ),
919
- std::make_pair (CoverageTracePC, " -fsanitize-coverage-trace-pc" ),
920
- std::make_pair (CoverageTracePCGuard, " -fsanitize-coverage-trace-pc-guard" ),
921
- std::make_pair (CoverageInline8bitCounters, " -fsanitize-coverage-inline-8bit-counters" ),
922
- std::make_pair (CoveragePCTable, " -fsanitize-coverage-pc-table" ),
923
- std::make_pair (CoverageNoPrune, " -fsanitize-coverage-no-prune" ),
924
- std::make_pair (CoverageStackDepth, " -fsanitize-coverage-stack-depth" )};
913
+ std::make_pair (CoverageFunc, " -fsanitize-coverage-type=1" ),
914
+ std::make_pair (CoverageBB, " -fsanitize-coverage-type=2" ),
915
+ std::make_pair (CoverageEdge, " -fsanitize-coverage-type=3" ),
916
+ std::make_pair (CoverageIndirCall, " -fsanitize-coverage-indirect-calls" ),
917
+ std::make_pair (CoverageTraceBB, " -fsanitize-coverage-trace-bb" ),
918
+ std::make_pair (CoverageTraceCmp, " -fsanitize-coverage-trace-cmp" ),
919
+ std::make_pair (CoverageTraceDiv, " -fsanitize-coverage-trace-div" ),
920
+ std::make_pair (CoverageTraceGep, " -fsanitize-coverage-trace-gep" ),
921
+ std::make_pair (Coverage8bitCounters, " -fsanitize-coverage-8bit-counters" ),
922
+ std::make_pair (CoverageTracePC, " -fsanitize-coverage-trace-pc" ),
923
+ std::make_pair (CoverageTracePCGuard,
924
+ " -fsanitize-coverage-trace-pc-guard" ),
925
+ std::make_pair (CoverageInline8bitCounters,
926
+ " -fsanitize-coverage-inline-8bit-counters" ),
927
+ std::make_pair (CoverageInlineBoolFlag,
928
+ " -fsanitize-coverage-inline-bool-flag" ),
929
+ std::make_pair (CoveragePCTable, " -fsanitize-coverage-pc-table" ),
930
+ std::make_pair (CoverageNoPrune, " -fsanitize-coverage-no-prune" ),
931
+ std::make_pair (CoverageStackDepth, " -fsanitize-coverage-stack-depth" )};
925
932
for (auto F : CoverageFlags) {
926
933
if (CoverageFeatures & F.first )
927
934
CmdArgs.push_back (F.second );
@@ -1105,22 +1112,23 @@ int parseCoverageFeatures(const Driver &D, const llvm::opt::Arg *A) {
1105
1112
for (int i = 0 , n = A->getNumValues (); i != n; ++i) {
1106
1113
const char *Value = A->getValue (i);
1107
1114
int F = llvm::StringSwitch<int >(Value)
1108
- .Case (" func" , CoverageFunc)
1109
- .Case (" bb" , CoverageBB)
1110
- .Case (" edge" , CoverageEdge)
1111
- .Case (" indirect-calls" , CoverageIndirCall)
1112
- .Case (" trace-bb" , CoverageTraceBB)
1113
- .Case (" trace-cmp" , CoverageTraceCmp)
1114
- .Case (" trace-div" , CoverageTraceDiv)
1115
- .Case (" trace-gep" , CoverageTraceGep)
1116
- .Case (" 8bit-counters" , Coverage8bitCounters)
1117
- .Case (" trace-pc" , CoverageTracePC)
1118
- .Case (" trace-pc-guard" , CoverageTracePCGuard)
1119
- .Case (" no-prune" , CoverageNoPrune)
1120
- .Case (" inline-8bit-counters" , CoverageInline8bitCounters)
1121
- .Case (" pc-table" , CoveragePCTable)
1122
- .Case (" stack-depth" , CoverageStackDepth)
1123
- .Default (0 );
1115
+ .Case (" func" , CoverageFunc)
1116
+ .Case (" bb" , CoverageBB)
1117
+ .Case (" edge" , CoverageEdge)
1118
+ .Case (" indirect-calls" , CoverageIndirCall)
1119
+ .Case (" trace-bb" , CoverageTraceBB)
1120
+ .Case (" trace-cmp" , CoverageTraceCmp)
1121
+ .Case (" trace-div" , CoverageTraceDiv)
1122
+ .Case (" trace-gep" , CoverageTraceGep)
1123
+ .Case (" 8bit-counters" , Coverage8bitCounters)
1124
+ .Case (" trace-pc" , CoverageTracePC)
1125
+ .Case (" trace-pc-guard" , CoverageTracePCGuard)
1126
+ .Case (" no-prune" , CoverageNoPrune)
1127
+ .Case (" inline-8bit-counters" , CoverageInline8bitCounters)
1128
+ .Case (" inline-bool-flag" , CoverageInlineBoolFlag)
1129
+ .Case (" pc-table" , CoveragePCTable)
1130
+ .Case (" stack-depth" , CoverageStackDepth)
1131
+ .Default (0 );
1124
1132
if (F == 0 )
1125
1133
D.Diag (clang::diag::err_drv_unsupported_option_argument)
1126
1134
<< A->getOption ().getName () << Value;
0 commit comments