From 9e28fe60bbfa5de196ce4aa396210bf10fc5c266 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 2 Oct 2012 20:31:52 +0000 Subject: [PATCH] Change AnalyzerOptions::mayInlineCXXMemberFunction to default populate the config string table. Also setup a test for dumping the analyzer configuration for C++. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165040 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../StaticAnalyzer/Core/AnalyzerOptions.h | 2 +- lib/StaticAnalyzer/Core/AnalyzerOptions.cpp | 7 ++++--- test/Analysis/analyzer-config.cpp | 20 +++++++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 test/Analysis/analyzer-config.cpp diff --git a/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h b/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h index d6dee64e70..852f8bb9c5 100644 --- a/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h +++ b/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h @@ -204,7 +204,7 @@ public: /// This is controlled by the 'c++-inlining' config option. /// /// \sa CXXMemberInliningMode - bool mayInlineCXXMemberFunction(CXXInlineableMemberKind K) const; + bool mayInlineCXXMemberFunction(CXXInlineableMemberKind K); /// Returns true if ObjectiveC inlining is enabled, false otherwise. bool mayInlineObjCMethod(); diff --git a/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp b/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp index 7e6013bba8..bb1acb0ce8 100644 --- a/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp +++ b/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp @@ -19,19 +19,20 @@ using namespace clang; using namespace llvm; bool -AnalyzerOptions::mayInlineCXXMemberFunction(CXXInlineableMemberKind K) const { +AnalyzerOptions::mayInlineCXXMemberFunction(CXXInlineableMemberKind K) { if (IPAMode < Inlining) return false; if (!CXXMemberInliningMode) { static const char *ModeKey = "c++-inlining"; - std::string ModeStr = Config.lookup(ModeKey); + + StringRef ModeStr(Config.GetOrCreateValue(ModeKey, + "methods").getValue()); CXXInlineableMemberKind &MutableMode = const_cast(CXXMemberInliningMode); MutableMode = llvm::StringSwitch(ModeStr) - .Case("", CIMK_MemberFunctions) .Case("constructors", CIMK_Constructors) .Case("destructors", CIMK_Destructors) .Case("none", CIMK_None) diff --git a/test/Analysis/analyzer-config.cpp b/test/Analysis/analyzer-config.cpp new file mode 100644 index 0000000000..32196bfff8 --- /dev/null +++ b/test/Analysis/analyzer-config.cpp @@ -0,0 +1,20 @@ +// RUN: %clang --analyze %s -o /dev/null -Xclang -analyzer-checker=debug.ConfigDumper > %t 2>&1 +// RUN: FileCheck --input-file=%t %s + +void bar() {} +void foo() { bar(); } + +class Foo { +public: + void bar() {} + void foo() { bar(); } +}; + +// CHECK: [config] +// CHECK-NEXT: c++-inlining = methods +// CHECK-NEXT: c++-stdlib-inlining = true +// CHECK-NEXT: c++-template-inlining = true +// CHECK-NEXT: cfg-temporary-dtors = false +// CHECK-NEXT: faux-bodies = true +// CHECK-NEXT: [stats] +// CHECK-NEXT: num-entries = 5 -- 2.40.0