bool getBooleanOption(StringRef Name, bool DefaultVal);
/// Interprets an option's string value as an integer value.
- int getOptionAsInteger(llvm::StringRef Name, int DefaultVal) const;
+ int getOptionAsInteger(llvm::StringRef Name, int DefaultVal);
public:
/// Returns the option controlling which C++ member functions will be
// considered to be small enough to always inline.
//
// This is controlled by "ipa-always-inline-size" analyzer-config option.
- unsigned getAlwaysInlineSize() const;
+ unsigned getAlwaysInlineSize();
/// Returns true if the analyzer engine should synthesize fake bodies
/// for well-known functions.
#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
#include "llvm/ADT/StringSwitch.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/Support/raw_ostream.h"
using namespace clang;
using namespace llvm;
return *PruneNullReturnPaths;
}
-int AnalyzerOptions::getOptionAsInteger(StringRef Name, int DefaultVal) const {
- std::string OptStr = Config.lookup(Name);
- if (OptStr.empty())
- return DefaultVal;
-
+int AnalyzerOptions::getOptionAsInteger(StringRef Name, int DefaultVal) {
+ llvm::SmallString<10> StrBuf;
+ llvm::raw_svector_ostream OS(StrBuf);
+ OS << DefaultVal;
+
+ StringRef V(Config.GetOrCreateValue(Name, OS.str()).getValue());
int Res = DefaultVal;
- assert(StringRef(OptStr).getAsInteger(10, Res) == false &&
- "analyzer-config option should be numeric.");
-
+ bool b = V.getAsInteger(10, Res);
+ assert(!b && "analyzer-config option should be numeric");
return Res;
}
-unsigned AnalyzerOptions::getAlwaysInlineSize() const {
- if (!AlwaysInlineSize.hasValue()) {
- unsigned DefaultSize = 3;
- const_cast<Optional<unsigned> &>(AlwaysInlineSize) =
- getOptionAsInteger("ipa-always-inline-size", DefaultSize);
- }
-
+unsigned AnalyzerOptions::getAlwaysInlineSize() {
+ if (!AlwaysInlineSize.hasValue())
+ AlwaysInlineSize = getOptionAsInteger("ipa-always-inline-size", 3);
return AlwaysInlineSize.getValue();
}
// CHECK-NEXT: c++-template-inlining = true
// CHECK-NEXT: cfg-temporary-dtors = false
// CHECK-NEXT: faux-bodies = true
+// CHECK-NEXT: ipa-always-inline-size = 3
// CHECK-NEXT: [stats]
-// CHECK-NEXT: num-entries = 5
+// CHECK-NEXT: num-entries = 6