[cfe-commits] r165041 - in /cfe/trunk: include/clang/StaticAnalyzer/Core/AnalyzerOptions.h lib/StaticAnalyzer/Core/AnalyzerOptions.cpp test/Analysis/analyzer-config.c test/Analysis/analyzer-config.cpp
Jordan Rose
jordan_rose at apple.com
Tue Oct 2 14:36:58 PDT 2012
On Oct 2, 2012, at 13:31 , Ted Kremenek <kremenek at apple.com> wrote:
> Author: kremenek
> Date: Tue Oct 2 15:31:56 2012
> New Revision: 165041
>
> URL: http://llvm.org/viewvc/llvm-project?rev=165041&view=rev
> Log:
> Tweak AnalyzerOptions::getOptionAsInteger() to populate the string
> table, making it printable with the ConfigDump checker. Along the
> way, fix a really serious bug where the value was getting parsed
> from the string in code that was in an assert() call. This means
> in a Release-Asserts build this code wouldn't work as expected.
Yikes! Good catch. But -Wunused will now warn on the bool variable. (void)b?
> Modified:
> cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp
> cfe/trunk/test/Analysis/analyzer-config.c
> cfe/trunk/test/Analysis/analyzer-config.cpp
>
> Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h?rev=165041&r1=165040&r2=165041&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h (original)
> +++ cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h Tue Oct 2 15:31:56 2012
> @@ -195,7 +195,7 @@
> 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
> @@ -243,7 +243,7 @@
> // 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.
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp?rev=165041&r1=165040&r2=165041&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp Tue Oct 2 15:31:56 2012
> @@ -14,6 +14,8 @@
>
> #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;
> @@ -102,25 +104,21 @@
> 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();
> }
>
>
> Modified: cfe/trunk/test/Analysis/analyzer-config.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/analyzer-config.c?rev=165041&r1=165040&r2=165041&view=diff
> ==============================================================================
> --- cfe/trunk/test/Analysis/analyzer-config.c (original)
> +++ cfe/trunk/test/Analysis/analyzer-config.c Tue Oct 2 15:31:56 2012
> @@ -7,5 +7,6 @@
> // CHECK: [config]
> // 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 = 2
> +// CHECK-NEXT: num-entries = 3
>
> Modified: cfe/trunk/test/Analysis/analyzer-config.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/analyzer-config.cpp?rev=165041&r1=165040&r2=165041&view=diff
> ==============================================================================
> --- cfe/trunk/test/Analysis/analyzer-config.cpp (original)
> +++ cfe/trunk/test/Analysis/analyzer-config.cpp Tue Oct 2 15:31:56 2012
> @@ -16,5 +16,6 @@
> // 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
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list