]> granicus.if.org Git - clang/commitdiff
Add configuration plumbing to enable static initializer branching in the CFG for...
authorTed Kremenek <kremenek@apple.com>
Fri, 29 Mar 2013 00:09:22 +0000 (00:09 +0000)
committerTed Kremenek <kremenek@apple.com>
Fri, 29 Mar 2013 00:09:22 +0000 (00:09 +0000)
This setting still isn't enabled yet in the analyzer.  This is
just prep work.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178317 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/AnalysisContext.h
include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
lib/Analysis/AnalysisDeclContext.cpp
lib/StaticAnalyzer/Core/AnalysisManager.cpp
lib/StaticAnalyzer/Core/AnalyzerOptions.cpp

index 880176ce5178507e5460263594365533b7185b27..59140d4736db3fe57749cacc2c2c87655efc23bc 100644 (file)
@@ -410,7 +410,8 @@ public:
                              bool addImplicitDtors = false,
                              bool addInitializers = false,
                              bool addTemporaryDtors = false,
-                             bool synthesizeBodies = false);
+                             bool synthesizeBodies = false,
+                             bool addStaticInitBranches = false);
 
   ~AnalysisDeclContextManager();
 
index eb58803065f9fc51afff293488e9c0d29391705a..5e29201447a78c04b2c20ac7bca09b928a54f04c 100644 (file)
@@ -313,6 +313,10 @@ public:
   /// values "true" and "false".
   bool shouldPrunePaths();
 
+  /// Returns true if 'static' initializers should be in conditional logic
+  /// in the CFG.
+  bool shouldConditionalizeStaticInitializers();
+
   // Returns the size of the functions (in basic blocks), which should be
   // considered to be small enough to always inline.
   //
index 36d1dba5e3b7db484dc087263547e1e41467b670..ebbafbf4a9ac3c6982c43bf97178a8817f9ef44c 100644 (file)
@@ -66,13 +66,15 @@ AnalysisDeclContextManager::AnalysisDeclContextManager(bool useUnoptimizedCFG,
                                                        bool addImplicitDtors,
                                                        bool addInitializers,
                                                        bool addTemporaryDtors,
-                                                       bool synthesizeBodies)
+                                                       bool synthesizeBodies,
+                                                       bool addStaticInitBranch)
   : SynthesizeBodies(synthesizeBodies)
 {
   cfgBuildOptions.PruneTriviallyFalseEdges = !useUnoptimizedCFG;
   cfgBuildOptions.AddImplicitDtors = addImplicitDtors;
   cfgBuildOptions.AddInitializers = addInitializers;
   cfgBuildOptions.AddTemporaryDtors = addTemporaryDtors;
+  cfgBuildOptions.AddStaticInitBranches = addStaticInitBranch;
 }
 
 void AnalysisDeclContextManager::clear() {
index 011d4c09a23fef75f4fc45a2164e5d15890f5983..747b73c4164b9fc47e942cc67dee31dcf4833534 100644 (file)
@@ -25,7 +25,8 @@ AnalysisManager::AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags,
               /*AddImplicitDtors=*/true,
               /*AddInitializers=*/true,
               Options.includeTemporaryDtorsInCFG(),
-              Options.shouldSynthesizeBodies()),
+              Options.shouldSynthesizeBodies(),
+              Options.shouldConditionalizeStaticInitializers()),
     Ctx(ctx),
     Diags(diags),
     LangOpts(lang),
index dca68f71ab54e0545f3bfbcf699c00d2e6c216c7..1326d0d01b0de4600eb4500e5101996c27e85564 100644 (file)
@@ -236,3 +236,8 @@ bool AnalyzerOptions::shouldSynthesizeBodies() {
 bool AnalyzerOptions::shouldPrunePaths() {
   return getBooleanOption("prune-paths", true);
 }
+
+bool AnalyzerOptions::shouldConditionalizeStaticInitializers() {
+  return getBooleanOption("conditional-static-initializers", false);
+}
+