16 #include "llvm/ADT/SmallString.h" 17 #include "llvm/ADT/StringSwitch.h" 18 #include "llvm/ADT/StringRef.h" 19 #include "llvm/ADT/Twine.h" 20 #include "llvm/Support/ErrorHandling.h" 21 #include "llvm/Support/FileSystem.h" 22 #include "llvm/Support/FormattedStream.h" 23 #include "llvm/Support/raw_ostream.h" 29 using namespace clang;
34 llvm::raw_ostream &Out,
35 std::pair<StringRef, StringRef> EntryDescPair,
36 size_t InitialPad,
size_t EntryWidth,
size_t MinLineWidth) {
38 llvm::formatted_raw_ostream FOut(Out);
40 const size_t PadForDesc = InitialPad + EntryWidth;
42 FOut.PadToColumn(InitialPad) << EntryDescPair.first;
44 if (FOut.getColumn() > PadForDesc)
47 FOut.PadToColumn(PadForDesc);
49 if (MinLineWidth == 0) {
50 FOut << EntryDescPair.second;
54 for (
char C : EntryDescPair.second) {
55 if (FOut.getColumn() > MinLineWidth && C ==
' ') {
57 FOut.PadToColumn(PadForDesc);
67 llvm::StringSwitch<llvm::Optional<ExplorationStrategyKind>>(
71 .Case(
"unexplored_first",
73 .Case(
"unexplored_first_queue",
75 .Case(
"unexplored_first_location_queue",
77 .Case(
"bfs_block_dfs_contents",
80 assert(K.hasValue() &&
"User mode is invalid.");
85 auto K = llvm::StringSwitch<llvm::Optional<IPAKind>>(IPAMode)
92 assert(K.hasValue() &&
"IPA Mode is invalid.");
104 llvm::StringSwitch<llvm::Optional<CXXInlineableMemberKind>>(
105 CXXMemberInliningMode)
112 assert(K.hasValue() &&
"Invalid c++ member function inlining mode.");
118 StringRef OptionName,
119 bool SearchInParents)
const {
120 assert(!CheckerName.empty() &&
121 "Empty checker name! Make sure the checker object (including it's " 122 "bases!) if fully initialized before calling this function!");
124 ConfigTable::const_iterator E = Config.end();
126 ConfigTable::const_iterator I =
127 Config.find((Twine(CheckerName) +
":" + OptionName).str());
129 return StringRef(I->getValue());
130 size_t Pos = CheckerName.rfind(
'.');
131 if (Pos == StringRef::npos)
134 CheckerName = CheckerName.substr(0, Pos);
135 }
while (!CheckerName.empty() && SearchInParents);
137 llvm_unreachable(
"Unknown checker option! Did you call getChecker*Option " 138 "with incorrect parameters? User input must've been " 139 "verified by CheckerRegistry.");
145 StringRef OptionName,
146 bool SearchInParents)
const {
147 return getCheckerStringOption(
152 StringRef OptionName,
153 bool SearchInParents)
const {
154 auto Ret = llvm::StringSwitch<llvm::Optional<bool>>(
155 getCheckerStringOption(CheckerName, OptionName,
158 .Case(
"false",
false)
162 "This option should be either 'true' or 'false', and should've been " 163 "validated by CheckerRegistry!");
169 StringRef OptionName,
170 bool SearchInParents)
const {
171 return getCheckerBooleanOption(
176 StringRef OptionName,
177 bool SearchInParents)
const {
179 bool HasFailed = getCheckerStringOption(CheckerName, OptionName,
181 .getAsInteger(0, Ret);
183 "This option should be numeric, and should've been validated by " 190 StringRef OptionName,
191 bool SearchInParents)
const {
192 return getCheckerIntegerOption(
Inline C functions and blocks when their definitions are available.
IPAKind
Describes the different modes of inter-procedural analysis.
Specialize PointerLikeTypeTraits to allow LazyGenerationalUpdatePtr to be placed into a PointerUnion...
StringRef getCheckerStringOption(StringRef CheckerName, StringRef OptionName, bool SearchInParents=false) const
Query an option's string value.
Perform only intra-procedural analysis.
A dummy mode in which no C++ inlining is enabled.
static void printFormattedEntry(llvm::raw_ostream &Out, std::pair< StringRef, StringRef > EntryDescPair, size_t EntryWidth, size_t InitialPad, size_t MinLineWidth=0)
Convenience function for printing options or checkers and their description in a formatted manner...
Inline callees(C, C++, ObjC) when their definitions are available.
StringRef getTagDescription() const override
Refers to regular member function and operator calls.
Refers to constructors (implicit or explicit).
Enable inlining of dynamically dispatched methods.
IPAKind getIPAMode() const
Returns the inter-procedural analysis mode.
static bool Ret(InterpState &S, CodePtr &PC, APValue &Result)
Refers to destructors (implicit or explicit).
ExplorationStrategyKind getExplorationStrategy() const
bool getCheckerBooleanOption(StringRef CheckerName, StringRef OptionName, bool SearchInParents=false) const
Interprets an option's string value as a boolean.
Dataflow Directional Tag Classes.
bool mayInlineCXXMemberFunction(CXXInlineableMemberKind K) const
Returns the option controlling which C++ member functions will be considered for inlining.
int getCheckerIntegerOption(StringRef CheckerName, StringRef OptionName, bool SearchInParents=false) const
Interprets an option's string value as an integer value.
CXXInlineableMemberKind
Describes the different kinds of C++ member functions which can be considered for inlining by the ana...
Enable inlining of dynamically dispatched methods, bifurcate paths when exact type info is unavailabl...