From: Anna Zaks Date: Thu, 1 Mar 2012 22:37:46 +0000 (+0000) Subject: [analyzer] Turn inlining on by default for better testing exposure. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=278f1f8d9557babb22b966379dd89039f3f8a440;p=clang [analyzer] Turn inlining on by default for better testing exposure. Fix a test, which was most likely an unintended recursive call. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151848 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Frontend/AnalyzerOptions.h b/include/clang/Frontend/AnalyzerOptions.h index 66d0c37777..8a1f4f0227 100644 --- a/include/clang/Frontend/AnalyzerOptions.h +++ b/include/clang/Frontend/AnalyzerOptions.h @@ -100,7 +100,7 @@ public: TrimGraph = 0; VisualizeEGDot = 0; VisualizeEGUbi = 0; - InlineCall = 0; + InlineCall = 1; UnoptimizedCFG = 0; CFGAddImplicitDtors = 0; CFGAddInitializers = 0; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 1d77c5f1a8..08af9f77ca 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1339,6 +1339,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-analyzer-eagerly-assume"); + CmdArgs.push_back("-analyzer-inline-call"); + // Add default argument set. if (!Args.hasArg(options::OPT__analyzer_no_default_checks)) { CmdArgs.push_back("-analyzer-checker=core"); diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index d792dc7730..b0c03024ac 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -1044,7 +1044,8 @@ static bool ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args, Opts.MaxNodes = Args.getLastArgIntValue(OPT_analyzer_max_nodes, 150000,Diags); Opts.MaxLoop = Args.getLastArgIntValue(OPT_analyzer_max_loop, 4, Diags); Opts.EagerlyTrimEGraph = !Args.hasArg(OPT_analyzer_no_eagerly_trim_egraph); - Opts.InlineCall = Args.hasArg(OPT_analyzer_inline_call); + if (Args.hasArg(OPT_analyzer_inline_call)) + Opts.InlineCall = 1; Opts.PrintStats = Args.hasArg(OPT_analyzer_stats); Opts.CheckersControlList.clear(); diff --git a/test/Analysis/misc-ps-region-store.m b/test/Analysis/misc-ps-region-store.m index c915263644..7268c909be 100644 --- a/test/Analysis/misc-ps-region-store.m +++ b/test/Analysis/misc-ps-region-store.m @@ -294,9 +294,11 @@ int test_invalidate_field_test_positive() { struct ArrayWrapper { unsigned char y[16]; }; struct WrappedStruct { unsigned z; }; +void test_handle_array_wrapper_helper(); + int test_handle_array_wrapper() { struct ArrayWrapper x; - test_handle_array_wrapper(&x); + test_handle_array_wrapper_helper(&x); struct WrappedStruct *p = (struct WrappedStruct*) x.y; // expected-warning{{Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption.}} return p->z; // no-warning }