Page Not Found
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
diff --git a/404.html b/404.html index d3459e7f29a..d107a39f122 100644 --- a/404.html +++ b/404.html @@ -13,8 +13,8 @@ - - + +
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
printf()
Argument Types",id:"printf-argument-types",level:2},{value:"Pulse",id:"pulse",level:2},{value:"Purity",id:"purity",level:2},{value:"Quandary",id:"quandary",level:2},{value:"RacerD",id:"racerd",level:2},{value:"Resource Leak Lab Exercise",id:"resource-leak-lab-exercise",level:2},{value:"Scope Leakage",id:"scope-leakage",level:2},{value:"Static Initialization Order Fiasco",id:"static-initialization-order-fiasco",level:2},{value:"SIL validation",id:"sil-validation",level:2},{value:"Lineage",id:"lineage",level:2},{value:"Self in Block",id:"self-in-block",level:2},{value:"Starvation",id:"starvation",level:2},{value:"Topl",id:"topl",level:2}];function d(e){const i={a:"a",code:"code",h2:"h2",p:"p",strong:"strong",...(0,s.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.p,{children:"Here is an overview of the checkers currently available in Infer."}),"\n",(0,r.jsx)(i.h2,{id:"annotation-reachability",children:"Annotation Reachability"}),"\n",(0,r.jsxs)(i.p,{children:["Given pairs of source and sink annotations, e.g. ",(0,r.jsx)(i.code,{children:"@A"})," and ",(0,r.jsx)(i.code,{children:"@B"}),", this checker will warn whenever some method annotated with ",(0,r.jsx)(i.code,{children:"@A"})," calls, directly or indirectly, another method annotated with ",(0,r.jsx)(i.code,{children:"@B"}),". Besides the custom pairs, it is also possible to enable some built-in checks, such as ",(0,r.jsx)(i.code,{children:"@PerformanceCritical"})," reaching ",(0,r.jsx)(i.code,{children:"@Expensive"})," or ",(0,r.jsx)(i.code,{children:"@NoAllocation"})," reaching ",(0,r.jsx)(i.code,{children:"new"}),". See flags starting with ",(0,r.jsx)(i.code,{children:"--annotation-reachability"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-annotation-reachability",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"biabduction",children:"Biabduction"}),"\n",(0,r.jsx)(i.p,{children:"This analysis deals with a range of issues, many linked to memory safety."}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," This has been replaced by Pulse and will be removed in the next release."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-biabduction",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"buffer-overrun-analysis-inferbo",children:"Buffer Overrun Analysis (InferBO)"}),"\n",(0,r.jsx)(i.p,{children:"InferBO is a detector for out-of-bounds array accesses."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-bufferoverrun",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"config-impact-analysis",children:"Config Impact Analysis"}),"\n",(0,r.jsx)(i.p,{children:"[EXPERIMENTAL] Collects function that are called without config checks."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-config-impact-analysis",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"cost-complexity-analysis",children:"Cost: Complexity Analysis"}),"\n",(0,r.jsxs)(i.p,{children:["Computes the asymptotic complexity of functions with respect to execution cost or other user defined resources. Can be used to detect changes in the complexity with ",(0,r.jsx)(i.code,{children:"infer reportdiff"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-cost",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"datalog-based-points-to-analysis",children:"Datalog-based points-to analysis"}),"\n",(0,r.jsx)(i.p,{children:"Experimental datalog-based points-to analysis."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-datalog",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"fragment-retains-view",children:"Fragment Retains View"}),"\n",(0,r.jsx)(i.p,{children:"Detects when Android fragments are not explicitly nullified before becoming unreachable."}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Unmaintained due to poor precision."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-fragment-retains-view",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"impurity",children:"Impurity"}),"\n",(0,r.jsx)(i.p,{children:'Detects functions with potential side-effects. Same as "purity", but implemented on top of Pulse.'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-impurity",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"inefficient-keyset-iterator",children:"Inefficient keySet Iterator"}),"\n",(0,r.jsx)(i.p,{children:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-inefficient-keyset-iterator",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"litho-required-props",children:'Litho "Required Props"'}),"\n",(0,r.jsxs)(i.p,{children:["Checks that all non-optional ",(0,r.jsx)(i.code,{children:"@Prop"}),"s have been specified when constructing Litho components."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-litho-required-props",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"liveness",children:"Liveness"}),"\n",(0,r.jsx)(i.p,{children:"Detection of dead stores and unused variables."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-liveness",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"loop-hoisting",children:"Loop Hoisting"}),"\n",(0,r.jsx)(i.p,{children:"Detect opportunities to hoist function calls that are invariant outside of loop bodies for efficiency."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-loop-hoisting",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"parameter-not-null-checked",children:"Parameter Not Null Checked"}),"\n",(0,r.jsx)(i.p,{children:"An Objective-C-specific analysis to detect when a block parameter is used before being checked for null first."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-parameter-not-null-checked",children:"Visit here for more information."})}),"\n",(0,r.jsxs)(i.h2,{id:"printf-argument-types",children:[(0,r.jsx)(i.code,{children:"printf()"})," Argument Types"]}),"\n",(0,r.jsxs)(i.p,{children:["Detect mismatches between the Java ",(0,r.jsx)(i.code,{children:"printf"})," format strings and the argument types For example, this checker will warn about the type error in ",(0,r.jsx)(i.code,{children:'printf("Hello %d", "world")'})]}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Unmaintained."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-printf-args",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"pulse",children:"Pulse"}),"\n",(0,r.jsx)(i.p,{children:"General-purpose memory and value analysis engine."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-pulse",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"purity",children:"Purity"}),"\n",(0,r.jsx)(i.p,{children:'Detects pure (side-effect-free) functions. A different implementation of "impurity".'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-purity",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"quandary",children:"Quandary"}),"\n",(0,r.jsx)(i.p,{children:'The Quandary taint analysis detects flows of values between sources and sinks, except if the value went through a "sanitizer". In addition to some defaults, users can specify their own sources, sinks, and sanitizers functions.'}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Taint analysis is now supported by the Pulse checker and Quandary will be removed in the next release."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-quandary",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"racerd",children:"RacerD"}),"\n",(0,r.jsx)(i.p,{children:"Thread safety analysis."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-racerd",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"resource-leak-lab-exercise",children:"Resource Leak Lab Exercise"}),"\n",(0,r.jsx)(i.p,{children:'Toy checker for the "resource leak" write-your-own-checker exercise.'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-resource-leak-lab",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"scope-leakage",children:"Scope Leakage"}),"\n",(0,r.jsx)(i.p,{children:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-scope-leakage",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"static-initialization-order-fiasco",children:"Static Initialization Order Fiasco"}),"\n",(0,r.jsx)(i.p,{children:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-siof",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"sil-validation",children:"SIL validation"}),"\n",(0,r.jsx)(i.p,{children:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-sil-validation",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"lineage",children:"Lineage"}),"\n",(0,r.jsx)(i.p,{children:"Computes a dataflow graph"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-lineage",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"self-in-block",children:"Self in Block"}),"\n",(0,r.jsxs)(i.p,{children:["An Objective-C-specific analysis to detect when a block captures ",(0,r.jsx)(i.code,{children:"self"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-self-in-block",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"starvation",children:"Starvation"}),"\n",(0,r.jsx)(i.p,{children:"Detect various kinds of situations when no progress is being made because of concurrency errors."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-starvation",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"topl",children:"Topl"}),"\n",(0,r.jsx)(i.p,{children:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-topl",children:"Visit here for more information."})})]})}function h(e={}){const{wrapper:i}={...(0,s.M)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2172:(e,i,n)=>{n.d(i,{I:()=>a,M:()=>o});var r=n(1504);const s={},t=r.createContext(s);function o(e){const i=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(t.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/ca86781b.abeae509.js b/assets/js/ca86781b.abeae509.js
deleted file mode 100644
index e43c46664cc..00000000000
--- a/assets/js/ca86781b.abeae509.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4856],{3916:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var r=n(7624),s=n(2172);const t={title:"List of all checkers",hide_table_of_contents:!0},o=void 0,a={id:"all-checkers",title:"List of all checkers",description:"Here is an overview of the checkers currently available in Infer.",source:"@site/docs/all-checkers.md",sourceDirName:".",slug:"/all-checkers",permalink:"/docs/next/all-checkers",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"List of all checkers",hide_table_of_contents:!0},sidebar:"docs",previous:{title:"infer run",permalink:"/docs/next/man-infer-run"},next:{title:"List of all issue types",permalink:"/docs/next/all-issue-types"}},c={},l=[{value:"Annotation Reachability",id:"annotation-reachability",level:2},{value:"Biabduction",id:"biabduction",level:2},{value:"Buffer Overrun Analysis (InferBO)",id:"buffer-overrun-analysis-inferbo",level:2},{value:"Config Impact Analysis",id:"config-impact-analysis",level:2},{value:"Cost: Complexity Analysis",id:"cost-complexity-analysis",level:2},{value:"Datalog-based points-to analysis",id:"datalog-based-points-to-analysis",level:2},{value:"Fragment Retains View",id:"fragment-retains-view",level:2},{value:"Impurity",id:"impurity",level:2},{value:"Inefficient keySet Iterator",id:"inefficient-keyset-iterator",level:2},{value:"Litho "Required Props"",id:"litho-required-props",level:2},{value:"Liveness",id:"liveness",level:2},{value:"Loop Hoisting",id:"loop-hoisting",level:2},{value:"Parameter Not Null Checked",id:"parameter-not-null-checked",level:2},{value:"printf()
Argument Types",id:"printf-argument-types",level:2},{value:"Pulse",id:"pulse",level:2},{value:"Purity",id:"purity",level:2},{value:"Quandary",id:"quandary",level:2},{value:"RacerD",id:"racerd",level:2},{value:"Resource Leak Lab Exercise",id:"resource-leak-lab-exercise",level:2},{value:"Scope Leakage",id:"scope-leakage",level:2},{value:"Static Initialization Order Fiasco",id:"static-initialization-order-fiasco",level:2},{value:"SIL validation",id:"sil-validation",level:2},{value:"Lineage",id:"lineage",level:2},{value:"Self in Block",id:"self-in-block",level:2},{value:"Starvation",id:"starvation",level:2},{value:"Topl",id:"topl",level:2},{value:"Uninitialized Value",id:"uninitialized-value",level:2}];function d(e){const i={a:"a",code:"code",h2:"h2",p:"p",strong:"strong",...(0,s.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.p,{children:"Here is an overview of the checkers currently available in Infer."}),"\n",(0,r.jsx)(i.h2,{id:"annotation-reachability",children:"Annotation Reachability"}),"\n",(0,r.jsxs)(i.p,{children:["Given a pair of source and sink annotation, e.g. ",(0,r.jsx)(i.code,{children:"@PerformanceCritical"})," and ",(0,r.jsx)(i.code,{children:"@Expensive"}),", this checker will warn whenever some method annotated with ",(0,r.jsx)(i.code,{children:"@PerformanceCritical"})," calls, directly or indirectly, another method annotated with ",(0,r.jsx)(i.code,{children:"@Expensive"})]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-annotation-reachability",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"biabduction",children:"Biabduction"}),"\n",(0,r.jsx)(i.p,{children:"This analysis deals with a range of issues, many linked to memory safety."}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," This has been replaced by Pulse and will be removed in the next release."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-biabduction",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"buffer-overrun-analysis-inferbo",children:"Buffer Overrun Analysis (InferBO)"}),"\n",(0,r.jsx)(i.p,{children:"InferBO is a detector for out-of-bounds array accesses."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-bufferoverrun",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"config-impact-analysis",children:"Config Impact Analysis"}),"\n",(0,r.jsx)(i.p,{children:"[EXPERIMENTAL] Collects function that are called without config checks."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-config-impact-analysis",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"cost-complexity-analysis",children:"Cost: Complexity Analysis"}),"\n",(0,r.jsxs)(i.p,{children:["Computes the asymptotic complexity of functions with respect to execution cost or other user defined resources. Can be used to detect changes in the complexity with ",(0,r.jsx)(i.code,{children:"infer reportdiff"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-cost",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"datalog-based-points-to-analysis",children:"Datalog-based points-to analysis"}),"\n",(0,r.jsx)(i.p,{children:"Experimental datalog-based points-to analysis."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-datalog",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"fragment-retains-view",children:"Fragment Retains View"}),"\n",(0,r.jsx)(i.p,{children:"Detects when Android fragments are not explicitly nullified before becoming unreachable."}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Unmaintained due to poor precision."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-fragment-retains-view",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"impurity",children:"Impurity"}),"\n",(0,r.jsx)(i.p,{children:'Detects functions with potential side-effects. Same as "purity", but implemented on top of Pulse.'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-impurity",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"inefficient-keyset-iterator",children:"Inefficient keySet Iterator"}),"\n",(0,r.jsx)(i.p,{children:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-inefficient-keyset-iterator",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"litho-required-props",children:'Litho "Required Props"'}),"\n",(0,r.jsxs)(i.p,{children:["Checks that all non-optional ",(0,r.jsx)(i.code,{children:"@Prop"}),"s have been specified when constructing Litho components."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-litho-required-props",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"liveness",children:"Liveness"}),"\n",(0,r.jsx)(i.p,{children:"Detection of dead stores and unused variables."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-liveness",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"loop-hoisting",children:"Loop Hoisting"}),"\n",(0,r.jsx)(i.p,{children:"Detect opportunities to hoist function calls that are invariant outside of loop bodies for efficiency."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-loop-hoisting",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"parameter-not-null-checked",children:"Parameter Not Null Checked"}),"\n",(0,r.jsx)(i.p,{children:"An Objective-C-specific analysis to detect when a block parameter is used before being checked for null first."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-parameter-not-null-checked",children:"Visit here for more information."})}),"\n",(0,r.jsxs)(i.h2,{id:"printf-argument-types",children:[(0,r.jsx)(i.code,{children:"printf()"})," Argument Types"]}),"\n",(0,r.jsxs)(i.p,{children:["Detect mismatches between the Java ",(0,r.jsx)(i.code,{children:"printf"})," format strings and the argument types For example, this checker will warn about the type error in ",(0,r.jsx)(i.code,{children:'printf("Hello %d", "world")'})]}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Unmaintained."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-printf-args",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"pulse",children:"Pulse"}),"\n",(0,r.jsx)(i.p,{children:"General-purpose memory and value analysis engine."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-pulse",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"purity",children:"Purity"}),"\n",(0,r.jsx)(i.p,{children:'Detects pure (side-effect-free) functions. A different implementation of "impurity".'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-purity",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"quandary",children:"Quandary"}),"\n",(0,r.jsx)(i.p,{children:'The Quandary taint analysis detects flows of values between sources and sinks, except if the value went through a "sanitizer". In addition to some defaults, users can specify their own sources, sinks, and sanitizers functions.'}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Taint analysis is now supported by the Pulse checker and Quandary will be removed in the next release."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-quandary",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"racerd",children:"RacerD"}),"\n",(0,r.jsx)(i.p,{children:"Thread safety analysis."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-racerd",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"resource-leak-lab-exercise",children:"Resource Leak Lab Exercise"}),"\n",(0,r.jsx)(i.p,{children:'Toy checker for the "resource leak" write-your-own-checker exercise.'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-resource-leak-lab",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"scope-leakage",children:"Scope Leakage"}),"\n",(0,r.jsx)(i.p,{children:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-scope-leakage",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"static-initialization-order-fiasco",children:"Static Initialization Order Fiasco"}),"\n",(0,r.jsx)(i.p,{children:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-siof",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"sil-validation",children:"SIL validation"}),"\n",(0,r.jsx)(i.p,{children:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-sil-validation",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"lineage",children:"Lineage"}),"\n",(0,r.jsx)(i.p,{children:"Computes a dataflow graph"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-lineage",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"self-in-block",children:"Self in Block"}),"\n",(0,r.jsxs)(i.p,{children:["An Objective-C-specific analysis to detect when a block captures ",(0,r.jsx)(i.code,{children:"self"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-self-in-block",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"starvation",children:"Starvation"}),"\n",(0,r.jsx)(i.p,{children:"Detect various kinds of situations when no progress is being made because of concurrency errors."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-starvation",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"topl",children:"Topl"}),"\n",(0,r.jsx)(i.p,{children:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-topl",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"uninitialized-value",children:"Uninitialized Value"}),"\n",(0,r.jsx)(i.p,{children:"Warns when values are used before having been initialized."}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Uninitialized value checking has moved to Pulse."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-uninit",children:"Visit here for more information."})})]})}function h(e={}){const{wrapper:i}={...(0,s.M)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2172:(e,i,n)=>{n.d(i,{I:()=>a,M:()=>o});var r=n(1504);const s={},t=r.createContext(s);function o(e){const i=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(t.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/e9325e77.166166de.js b/assets/js/e9325e77.166166de.js
deleted file mode 100644
index 18f491aba1e..00000000000
--- a/assets/js/e9325e77.166166de.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9656],{5860:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var n=i(7624),s=i(2172);const r={title:"Topl",description:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."},o="Topl",a={id:"checker-topl",title:"Topl",description:"Detect errors based on user-provided state machines describing temporal properties over multiple objects.",source:"@site/docs/checker-topl.md",sourceDirName:".",slug:"/checker-topl",permalink:"/docs/next/checker-topl",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Topl",description:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."},sidebar:"docs",previous:{title:"Starvation",permalink:"/docs/next/checker-starvation"},next:{title:"Uninitialized Value",permalink:"/docs/next/checker-uninit"}},l={},c=[{value:"What is it?",id:"what-is-it",level:2},{value:"Specifying Properties",id:"specifying-properties",level:2},{value:"Limitations",id:"limitations",level:2},{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function d(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.M)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."}),"\n",(0,n.jsxs)(t.p,{children:["Activate with ",(0,n.jsx)(t.code,{children:"--topl"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Supported languages:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"C/C++/ObjC: Experimental"}),"\n",(0,n.jsx)(t.li,{children:"C#/.Net: No"}),"\n",(0,n.jsx)(t.li,{children:"Erlang: Experimental"}),"\n",(0,n.jsx)(t.li,{children:"Hack: No"}),"\n",(0,n.jsx)(t.li,{children:"Java: Experimental"}),"\n",(0,n.jsx)(t.li,{children:"Python: No"}),"\n"]}),"\n",(0,n.jsx)(t.h1,{id:"topl",children:"Topl"}),"\n",(0,n.jsx)(t.h2,{id:"what-is-it",children:"What is it?"}),"\n",(0,n.jsxs)(t.p,{children:["Topl is an analysis framework, built on top of Infer, for statically finding violations of temporal properties. Many analyses can be encoded as temporal properties supported by Topl, such as taint analysis. As a simple example, suppose that we don't want a value returned by method ",(0,n.jsx)(t.code,{children:"source()"})," to be sent as an argument to a method ",(0,n.jsx)(t.code,{children:"sink()"}),". This can be specified as follows:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:'property Taint\n prefix "Main"\n start -> start: *\n start -> tracking: source(Ret) => x := Ret\n tracking -> error: sink(Arg, VoidRet) when x == Arg\n'})}),"\n",(0,n.jsxs)(t.p,{children:["This specifies an automaton called ",(0,n.jsx)(t.code,{children:"Taint"})," that has three states (",(0,n.jsx)(t.code,{children:"start"}),", ",(0,n.jsx)(t.code,{children:"tracking"}),", ",(0,n.jsx)(t.code,{children:"error"}),"). Two of those states (",(0,n.jsx)(t.code,{children:"start"})," and ",(0,n.jsx)(t.code,{children:"error"}),") have special meaning; other states (",(0,n.jsx)(t.code,{children:"tracking"}),") can have any names. The first transition (",(0,n.jsx)(t.code,{children:"start \u2192 tracking"}),") is taken when a method called ",(0,n.jsx)(t.code,{children:"source()"})," is called, and its return value is stored in a register called ",(0,n.jsx)(t.code,{children:"x"}),"; the second transition (",(0,n.jsx)(t.code,{children:"tracking \u2192 error"}),") is taken when a method called ",(0,n.jsx)(t.code,{children:"sink()"})," is called, but only if its argument equals what was previously saved in register ",(0,n.jsx)(t.code,{children:"x"}),".\nThis property is violated in the following Java code:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:'public class Main {\n static void f() { g(tito(source())); }\n static void g(Object x) { h(x); }\n static void h(Object x) { sink(x); }\n static Object tito(Object x) { return x; }\n static Object source() { return "dirty"; }\n static void sink(Object x) {}\n}\n'})}),"\n",(0,n.jsxs)(t.p,{children:["Note that ",(0,n.jsx)(t.code,{children:"source()"})," and ",(0,n.jsx)(t.code,{children:"sink()"})," are not called from the same method, and that the \u201cdirty\u201d object is passed around a few times before finally reaching the sink. Assuming that the property is in a file ",(0,n.jsx)(t.code,{children:"taint.topl"})," and the Java code in a file ",(0,n.jsx)(t.code,{children:"Main.java"}),", you can invoke Infer with the following command:"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"infer --topl --topl-properties taint.topl -- javac Main.java\n"})}),"\n",(0,n.jsx)(t.p,{children:"It will display the following error:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"Main.java:2: error: Topl Error\n property Taint reaches state error.\n 1. public class Main {\n 2. > static void f() { g(tito(source())); }\n 3. static void g(Object x) { h(x); }\n 4. static void h(Object x) { sink(x); }\n"})}),"\n",(0,n.jsx)(t.p,{children:"To get a full trace, use the command"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"infer explore\n"})}),"\n",(0,n.jsx)(t.h2,{id:"specifying-properties",children:"Specifying Properties"}),"\n",(0,n.jsx)(t.p,{children:"A property is a nondeterministic automaton that can remember values in registers. An execution that drives the automaton from the start state to the error state will make Infer report an issue, and the trace that it produces will indicate which parts of the program drive which transitions of the automaton."}),"\n",(0,n.jsx)(t.p,{children:"The general form of a property is the following:"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:'property Name\n message "Optional error message" // This line can be missing\n prefix "Prefix" // There can be zero, one, or more prefix declarations\n sourceState -> targetState: Pattern(Arg1,...,ArgN,Ret) when Condition => Action\n'})}),"\n",(0,n.jsx)(t.p,{children:"The property name and the optional error message are used for reporting issues. The prefix declarations are used to simplify Patterns. The core of the property is the list of transitions."}),"\n",(0,n.jsx)(t.p,{children:"Each transition has a source state and a target state. The special transition label * means that the transition is always taken. Typically, there is a transition"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:" start -> start: *\n"})}),"\n",(0,n.jsx)(t.p,{children:"meaning that the property can start anywhere, not just at the beginning of a method."}),"\n",(0,n.jsx)(t.p,{children:"Otherwise, the label on a transition contains:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["a ",(0,n.jsx)(t.em,{children:"Pattern"}),", which indicates what kind of instruction in the program drives this transition;"]}),"\n",(0,n.jsx)(t.li,{children:"a list of transition variable bindings (above named Arg1, ..., but any identifier starting with uppercase letters works);"}),"\n",(0,n.jsx)(t.li,{children:"possibly a boolean Condition, which can refer to transition variables, registers and fields;"}),"\n",(0,n.jsxs)(t.li,{children:["possibly and Action, which is a list sequence of assignments of the form ",(0,n.jsx)(t.em,{children:"register"})," := ",(0,n.jsx)(t.em,{children:"TransitionVariable"})," (registers do not need to be declared, and any identifier starting with a lowercase letter works)."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"There are two types of patterns:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["a regex that matches method names","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"if the regex uses non-letters (such as dots) it must be within double-quotes; otherwise, double quotes are optional"}),"\n",(0,n.jsx)(t.li,{children:"the prefix declarations are used to add potential prefixes to the regex. The combine regex is essentially \u201c(prefix_regex_a | prefix_regex_b) transition_pattern_regex\u201c"}),"\n",(0,n.jsxs)(t.li,{children:["for a method with n arguments, there must be n+1 transition variables to get a match. The first n transition variables get bound to the argument values, and the last transition variable gets bound to the return value. ",(0,n.jsx)(t.em,{children:"This is true even for the case in which the return type is void"}),"."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["the special keyword ",(0,n.jsx)(t.strong,{children:"#ArrayWrite"}),". In that case, there should be two transition variables like \u201c(Array, Index)\u201d \u2014 Array gets bound to the array object, and Index gets bound to the index at which the write happens."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"The condition supports the following kinds of expressions:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Referring to identifiers: transition variables and registers"}),"\n",(0,n.jsxs)(t.li,{children:["Field access over objects in the form ",(0,n.jsx)(t.code,{children:"Identifier:Type.FieldName"}),", e.g. ",(0,n.jsx)(t.code,{children:"X:MyClass.myField"})," (this is currently only supported for Erlang)"]}),"\n",(0,n.jsx)(t.li,{children:"Integer literals"}),"\n",(0,n.jsxs)(t.li,{children:["The usual comparison operators (",(0,n.jsx)(t.code,{children:"=="}),", ",(0,n.jsx)(t.code,{children:"!="}),", ",(0,n.jsx)(t.code,{children:"<"}),", ",(0,n.jsx)(t.code,{children:">"}),", ",(0,n.jsx)(t.code,{children:">="}),", ",(0,n.jsx)(t.code,{children:"<="}),") and conjunctions (",(0,n.jsx)(t.code,{children:"&&"}),")"]}),"\n",(0,n.jsxs)(t.li,{children:["Reachability predicates of the form ",(0,n.jsx)(t.code,{children:"Ident1 ~~> Ident2"})," meaning that ",(0,n.jsx)(t.code,{children:"Ident2"})," can be reached via pointers/fields from ",(0,n.jsx)(t.code,{children:"Ident1"})," in the heap"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["For several examples, see ",(0,n.jsx)(t.a,{href:"https://github.com/facebook/infer/tree/main/infer/tests/codetoanalyze/java/topl",children:"https://github.com/facebook/infer/tree/main/infer/tests/codetoanalyze/java/topl"})]}),"\n",(0,n.jsx)(t.h2,{id:"limitations",children:"Limitations"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"By design, some problems may be missed. Topl is built on Pulse, which attempts to minimize false positives, at the cost of sometimes having false negatives."}),"\n",(0,n.jsxs)(t.li,{children:["Analysis time increases exponentially with the number of registers used in properties.","\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"In theory, there should be no significant slowdown if registers belong to different properties, but the implementation is not yet optimized."}),"\n",(0,n.jsx)(t.li,{children:"If there are many registers within the same property, then the slowdown is unavoidable (without some significant breakthrough). However, the maximum number of registers we ever used for one practical property was 3."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,n.jsx)(t.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/next/all-issue-types#topl_error",children:"TOPL_ERROR"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/next/all-issue-types#topl_error_latent",children:"TOPL_ERROR_LATENT"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.M)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},2172:(e,t,i)=>{i.d(t,{I:()=>a,M:()=>o});var n=i(1504);const s={},r=n.createContext(s);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/e9325e77.b0fe78fe.js b/assets/js/e9325e77.b0fe78fe.js
new file mode 100644
index 00000000000..3ea991e879d
--- /dev/null
+++ b/assets/js/e9325e77.b0fe78fe.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9656],{5860:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var i=n(7624),s=n(2172);const r={title:"Topl",description:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."},o="Topl",a={id:"checker-topl",title:"Topl",description:"Detect errors based on user-provided state machines describing temporal properties over multiple objects.",source:"@site/docs/checker-topl.md",sourceDirName:".",slug:"/checker-topl",permalink:"/docs/next/checker-topl",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Topl",description:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."},sidebar:"docs",previous:{title:"Starvation",permalink:"/docs/next/checker-starvation"},next:{title:"About Infer",permalink:"/docs/next/about-Infer"}},l={},c=[{value:"What is it?",id:"what-is-it",level:2},{value:"Specifying Properties",id:"specifying-properties",level:2},{value:"Limitations",id:"limitations",level:2},{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function d(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."}),"\n",(0,i.jsxs)(t.p,{children:["Activate with ",(0,i.jsx)(t.code,{children:"--topl"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Supported languages:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"C/C++/ObjC: Experimental"}),"\n",(0,i.jsx)(t.li,{children:"C#/.Net: No"}),"\n",(0,i.jsx)(t.li,{children:"Erlang: Experimental"}),"\n",(0,i.jsx)(t.li,{children:"Hack: No"}),"\n",(0,i.jsx)(t.li,{children:"Java: Experimental"}),"\n",(0,i.jsx)(t.li,{children:"Python: No"}),"\n"]}),"\n",(0,i.jsx)(t.h1,{id:"topl",children:"Topl"}),"\n",(0,i.jsx)(t.h2,{id:"what-is-it",children:"What is it?"}),"\n",(0,i.jsxs)(t.p,{children:["Topl is an analysis framework, built on top of Infer, for statically finding violations of temporal properties. Many analyses can be encoded as temporal properties supported by Topl, such as taint analysis. As a simple example, suppose that we don't want a value returned by method ",(0,i.jsx)(t.code,{children:"source()"})," to be sent as an argument to a method ",(0,i.jsx)(t.code,{children:"sink()"}),". This can be specified as follows:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:'property Taint\n prefix "Main"\n start -> start: *\n start -> tracking: source(Ret) => x := Ret\n tracking -> error: sink(Arg, VoidRet) when x == Arg\n'})}),"\n",(0,i.jsxs)(t.p,{children:["This specifies an automaton called ",(0,i.jsx)(t.code,{children:"Taint"})," that has three states (",(0,i.jsx)(t.code,{children:"start"}),", ",(0,i.jsx)(t.code,{children:"tracking"}),", ",(0,i.jsx)(t.code,{children:"error"}),"). Two of those states (",(0,i.jsx)(t.code,{children:"start"})," and ",(0,i.jsx)(t.code,{children:"error"}),") have special meaning; other states (",(0,i.jsx)(t.code,{children:"tracking"}),") can have any names. The first transition (",(0,i.jsx)(t.code,{children:"start \u2192 tracking"}),") is taken when a method called ",(0,i.jsx)(t.code,{children:"source()"})," is called, and its return value is stored in a register called ",(0,i.jsx)(t.code,{children:"x"}),"; the second transition (",(0,i.jsx)(t.code,{children:"tracking \u2192 error"}),") is taken when a method called ",(0,i.jsx)(t.code,{children:"sink()"})," is called, but only if its argument equals what was previously saved in register ",(0,i.jsx)(t.code,{children:"x"}),".\nThis property is violated in the following Java code:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:'public class Main {\n static void f() { g(tito(source())); }\n static void g(Object x) { h(x); }\n static void h(Object x) { sink(x); }\n static Object tito(Object x) { return x; }\n static Object source() { return "dirty"; }\n static void sink(Object x) {}\n}\n'})}),"\n",(0,i.jsxs)(t.p,{children:["Note that ",(0,i.jsx)(t.code,{children:"source()"})," and ",(0,i.jsx)(t.code,{children:"sink()"})," are not called from the same method, and that the \u201cdirty\u201d object is passed around a few times before finally reaching the sink. Assuming that the property is in a file ",(0,i.jsx)(t.code,{children:"taint.topl"})," and the Java code in a file ",(0,i.jsx)(t.code,{children:"Main.java"}),", you can invoke Infer with the following command:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"infer --topl --topl-properties taint.topl -- javac Main.java\n"})}),"\n",(0,i.jsx)(t.p,{children:"It will display the following error:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"Main.java:2: error: Topl Error\n property Taint reaches state error.\n 1. public class Main {\n 2. > static void f() { g(tito(source())); }\n 3. static void g(Object x) { h(x); }\n 4. static void h(Object x) { sink(x); }\n"})}),"\n",(0,i.jsx)(t.p,{children:"To get a full trace, use the command"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"infer explore\n"})}),"\n",(0,i.jsx)(t.h2,{id:"specifying-properties",children:"Specifying Properties"}),"\n",(0,i.jsx)(t.p,{children:"A property is a nondeterministic automaton that can remember values in registers. An execution that drives the automaton from the start state to the error state will make Infer report an issue, and the trace that it produces will indicate which parts of the program drive which transitions of the automaton."}),"\n",(0,i.jsx)(t.p,{children:"The general form of a property is the following:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:'property Name\n message "Optional error message" // This line can be missing\n prefix "Prefix" // There can be zero, one, or more prefix declarations\n sourceState -> targetState: Pattern(Arg1,...,ArgN,Ret) when Condition => Action\n'})}),"\n",(0,i.jsx)(t.p,{children:"The property name and the optional error message are used for reporting issues. The prefix declarations are used to simplify Patterns. The core of the property is the list of transitions."}),"\n",(0,i.jsx)(t.p,{children:"Each transition has a source state and a target state. The special transition label * means that the transition is always taken. Typically, there is a transition"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:" start -> start: *\n"})}),"\n",(0,i.jsx)(t.p,{children:"meaning that the property can start anywhere, not just at the beginning of a method."}),"\n",(0,i.jsx)(t.p,{children:"Otherwise, the label on a transition contains:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["a ",(0,i.jsx)(t.em,{children:"Pattern"}),", which indicates what kind of instruction in the program drives this transition;"]}),"\n",(0,i.jsx)(t.li,{children:"a list of transition variable bindings (above named Arg1, ..., but any identifier starting with uppercase letters works);"}),"\n",(0,i.jsx)(t.li,{children:"possibly a boolean Condition, which can refer to transition variables, registers and fields;"}),"\n",(0,i.jsxs)(t.li,{children:["possibly and Action, which is a list sequence of assignments of the form ",(0,i.jsx)(t.em,{children:"register"})," := ",(0,i.jsx)(t.em,{children:"TransitionVariable"})," (registers do not need to be declared, and any identifier starting with a lowercase letter works)."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"There are two types of patterns:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["a regex that matches method names","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"if the regex uses non-letters (such as dots) it must be within double-quotes; otherwise, double quotes are optional"}),"\n",(0,i.jsx)(t.li,{children:"the prefix declarations are used to add potential prefixes to the regex. The combine regex is essentially \u201c(prefix_regex_a | prefix_regex_b) transition_pattern_regex\u201c"}),"\n",(0,i.jsxs)(t.li,{children:["for a method with n arguments, there must be n+1 transition variables to get a match. The first n transition variables get bound to the argument values, and the last transition variable gets bound to the return value. ",(0,i.jsx)(t.em,{children:"This is true even for the case in which the return type is void"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["the special keyword ",(0,i.jsx)(t.strong,{children:"#ArrayWrite"}),". In that case, there should be two transition variables like \u201c(Array, Index)\u201d \u2014 Array gets bound to the array object, and Index gets bound to the index at which the write happens."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The condition supports the following kinds of expressions:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Referring to identifiers: transition variables and registers"}),"\n",(0,i.jsxs)(t.li,{children:["Field access over objects in the form ",(0,i.jsx)(t.code,{children:"Identifier:Type.FieldName"}),", e.g. ",(0,i.jsx)(t.code,{children:"X:MyClass.myField"})," (this is currently only supported for Erlang)"]}),"\n",(0,i.jsx)(t.li,{children:"Integer literals"}),"\n",(0,i.jsxs)(t.li,{children:["The usual comparison operators (",(0,i.jsx)(t.code,{children:"=="}),", ",(0,i.jsx)(t.code,{children:"!="}),", ",(0,i.jsx)(t.code,{children:"<"}),", ",(0,i.jsx)(t.code,{children:">"}),", ",(0,i.jsx)(t.code,{children:">="}),", ",(0,i.jsx)(t.code,{children:"<="}),") and conjunctions (",(0,i.jsx)(t.code,{children:"&&"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["Reachability predicates of the form ",(0,i.jsx)(t.code,{children:"Ident1 ~~> Ident2"})," meaning that ",(0,i.jsx)(t.code,{children:"Ident2"})," can be reached via pointers/fields from ",(0,i.jsx)(t.code,{children:"Ident1"})," in the heap"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["For several examples, see ",(0,i.jsx)(t.a,{href:"https://github.com/facebook/infer/tree/main/infer/tests/codetoanalyze/java/topl",children:"https://github.com/facebook/infer/tree/main/infer/tests/codetoanalyze/java/topl"})]}),"\n",(0,i.jsx)(t.h2,{id:"limitations",children:"Limitations"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"By design, some problems may be missed. Topl is built on Pulse, which attempts to minimize false positives, at the cost of sometimes having false negatives."}),"\n",(0,i.jsxs)(t.li,{children:["Analysis time increases exponentially with the number of registers used in properties.","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"In theory, there should be no significant slowdown if registers belong to different properties, but the implementation is not yet optimized."}),"\n",(0,i.jsx)(t.li,{children:"If there are many registers within the same property, then the slowdown is unavoidable (without some significant breakthrough). However, the maximum number of registers we ever used for one practical property was 3."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,i.jsx)(t.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/docs/next/all-issue-types#topl_error",children:"TOPL_ERROR"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"/docs/next/all-issue-types#topl_error_latent",children:"TOPL_ERROR_LATENT"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},2172:(e,t,n)=>{n.d(t,{I:()=>a,M:()=>o});var i=n(1504);const s={},r=i.createContext(s);function o(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/main.53cbafeb.js b/assets/js/main.53cbafeb.js
deleted file mode 100644
index 1ce6bb177b7..00000000000
--- a/assets/js/main.53cbafeb.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.53cbafeb.js.LICENSE.txt */
-(self.webpackChunk=self.webpackChunk||[]).push([[1590],{5052:(e,t,n)=>{"use strict";n.d(t,{I:()=>o});var r=n(1504);function o(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},628:(e,t,n)=>{"use strict";n.d(t,{c:()=>p});n(1504);var r=n(8852),o=n.n(r),a=n(4504);const i={"00d3276d":[()=>n.e(2068).then(n.bind(n,9436)),"@site/blog/2016-06-23-first-opensourceversary.md",9436],"0346afaa":[()=>n.e(1352).then(n.bind(n,6264)),"@site/versioned_docs/version-1.1.0/man-infer-debug.md",6264],"041e4035":[()=>n.e(1624).then(n.bind(n,1292)),"@site/docs/checker-starvation.md",1292],"04f8d6af":[()=>n.e(9728).then(n.bind(n,3796)),"@site/versioned_docs/version-1.1.0/checker-liveness.md",3796],"06d8773d":[()=>n.e(8384).then(n.bind(n,3380)),"@site/docs/checker-litho-required-props.md",3380],"07d14bbd":[()=>n.e(7848).then(n.bind(n,4604)),"@site/docs/checker-uninit.md",4604],"0ac93784":[()=>n.e(7296).then(n.bind(n,308)),"@site/versioned_docs/version-1.0.0/checker-annotation-reachability.md",308],"0c0efcaa":[()=>n.e(8528).then(n.bind(n,3924)),"@site/versioned_docs/version-1.1.0/checker-litho-required-props.md",3924],"0fe8a02a":[()=>n.e(6452).then(n.bind(n,9684)),"@site/docs/versions.md",9684],"12577cfd":[()=>n.e(3128).then(n.bind(n,1624)),"@site/versioned_docs/version-1.0.0/all-issue-types.md",1624],"128c6d36":[()=>n.e(7840).then(n.bind(n,4964)),"@site/docs/checker-printf-args.md",4964],"1460e89b":[()=>n.e(1008).then(n.bind(n,5728)),"@site/versioned_docs/version-1.0.0/02-separation-logic-and-biabduction.md",5728],"15a3954c":[()=>n.e(6322).then(n.bind(n,1708)),"@site/versioned_docs/version-1.0.0/checker-racerd.md",1708],"16fe8a4c":[()=>n.e(920).then(n.bind(n,7820)),"@site/docs/00-getting-started.md",7820],17896441:[()=>Promise.all([n.e(2176),n.e(9116),n.e(6752)]).then(n.bind(n,5104)),"@theme/DocItem",5104],"18328e9e":[()=>n.e(7952).then(n.bind(n,7480)),"@site/docs/checker-purity.md",7480],"184ad633":[()=>n.e(208).then(n.bind(n,7168)),"@site/versioned_docs/version-1.1.0/checker-dotnet-resource-leak.md",7168],"1906a68b":[()=>n.e(8928).then(n.bind(n,2428)),"@site/docs/02-separation-logic-and-biabduction.md",2428],"1a4e3797":[()=>Promise.all([n.e(2176),n.e(9648)]).then(n.bind(n,3416)),"@theme/SearchPage",3416],"1c7a9c9f":[()=>n.e(9792).then(n.bind(n,9804)),"@site/docs/checker-annotation-reachability.md",9804],"1d8647da":[()=>n.e(5336).then(n.bind(n,192)),"@site/versioned_docs/version-1.1.0/checker-quandary.md",192],"1db0afb7":[()=>n.e(3876).then(n.bind(n,5500)),"@site/versioned_docs/version-1.0.0/man-infer-reportdiff.md",5500],"1dbe42a7":[()=>n.e(3796).then(n.bind(n,400)),"@site/docs/01-man-pages.md",400],"1df9637e":[()=>n.e(7948).then(n.bind(n,9708)),"@site/docs/checker-cost.md",9708],"1fdfdeaa":[()=>n.e(1085).then(n.bind(n,9652)),"@site/docs/checker-biabduction.md",9652],21614072:[()=>n.e(172).then(n.bind(n,6976)),"@site/docs/man-infer-run.md",6976],"219c4568":[()=>n.e(1088).then(n.bind(n,7e3)),"@site/versioned_docs/version-1.0.0/man-infer-explore.md",7e3],"21a9d6ed":[()=>n.e(1672).then(n.bind(n,5776)),"@site/docs/man-infer-help.md",5776],"25a5a20c":[()=>n.e(6180).then(n.bind(n,3620)),"@site/docs/checker-bufferoverrun.md",3620],"293e08e8":[()=>n.e(9700).then(n.bind(n,4952)),"@site/blog/2017-10-20-ocamlformat-released.md?truncated=true",4952],"2ba1d2b8":[()=>n.e(7724).then(n.bind(n,832)),"@site/versioned_docs/version-1.0.0/versions.md",832],"31868bec":[()=>n.e(6868).then(n.t.bind(n,2080,19)),"/home/runner/work/infer/infer/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",2080],33776668:[()=>n.e(8906).then(n.bind(n,3192)),"@site/versioned_docs/version-1.1.0/checker-config-checks-between-markers.md",3192],"3423820d":[()=>n.e(2756).then(n.bind(n,1916)),"@site/blog/2017-10-20-ocamlformat-released.md",1916],"34fbd09a":[()=>n.e(9456).then(n.bind(n,3811)),"@site/versioned_docs/version-1.1.0/checker-biabduction.md",3811],"3c055f5e":[()=>n.e(7920).then(n.bind(n,596)),"@site/docs/man-infer-capture.md",596],"3c653e3b":[()=>n.e(904).then(n.bind(n,5845)),"@site/versioned_docs/version-1.1.0/01-man-pages.md",5845],"3c741b47":[()=>n.e(644).then(n.bind(n,868)),"@site/versioned_docs/version-1.1.0/man-infer.md",868],"3caf9b73":[()=>n.e(3043).then(n.bind(n,5660)),"@site/versioned_docs/version-1.0.0/checker-liveness.md",5660],"3d9729af":[()=>n.e(7192).then(n.bind(n,3676)),"@site/versioned_docs/version-1.1.0/checker-topl.md",3676],"3eac2097":[()=>n.e(5244).then(n.bind(n,2088)),"@site/docs/checker-liveness.md",2088],"3eb0a99f":[()=>n.e(9400).then(n.bind(n,2753)),"@site/blog/2016-08-30-curryon-rome-talk.md?truncated=true",2753],"3f2a1ecb":[()=>n.e(264).then(n.bind(n,6868)),"@site/versioned_docs/version-1.1.0/checker-starvation.md",6868],"413f2abb":[()=>n.e(2762).then(n.bind(n,8480)),"@site/versioned_docs/version-1.1.0/02-separation-logic-and-biabduction.md",8480],"420497a2":[()=>n.e(2760).then(n.bind(n,2188)),"@site/versioned_docs/version-1.1.0/checker-linters.md",2188],"43455a69":[()=>n.e(6828).then(n.bind(n,9616)),"@site/versioned_docs/version-1.0.0/04-absint-framework.md",9616],"45d37095":[()=>n.e(2200).then(n.bind(n,9880)),"@site/versioned_docs/version-1.1.0/checker-bufferoverrun.md",9880],"491a3217":[()=>n.e(8768).then(n.bind(n,8532)),"@site/blog/2016-11-28-atscale16.md?truncated=true",8532],"495e5e06":[()=>n.e(4072).then(n.bind(n,6436)),"@site/versioned_docs/version-1.0.0/checker-self-in-block.md",6436],"49bfadd9":[()=>n.e(6209).then(n.bind(n,8196)),"@site/versioned_docs/version-1.0.0/checker-purity.md",8196],"4c2546f9":[()=>n.e(4724).then(n.bind(n,9224)),"@site/docs/man-infer-explore.md",9224],"4dac5fec":[()=>n.e(6714).then(n.bind(n,3508)),"@site/docs/man-infer.md",3508],"4fefa35c":[()=>n.e(8916).then(n.bind(n,9892)),"@site/versioned_docs/version-1.0.0/checker-inefficient-keyset-iterator.md",9892],"509dc7bf":[()=>n.e(3044).then(n.bind(n,6804)),"@site/versioned_docs/version-1.1.0/checker-config-impact-analysis.md",6804],"556d04db":[()=>n.e(8008).then(n.bind(n,8804)),"@site/docs/checker-scope-leakage.md",8804],"56ebd09a":[()=>n.e(7012).then(n.bind(n,9424)),"@site/docs/00-hello-world.md",9424],"57bcddd6":[()=>n.e(6730).then(n.bind(n,6256)),"@site/versioned_docs/version-1.1.0/checker-eradicate.md",6256],"58de4400":[()=>n.e(820).then(n.bind(n,6872)),"@site/blog/2015-05-22-Infer-on-open-source-android-apps.md?truncated=true",6872],"5a5dcc21":[()=>n.e(5505).then(n.bind(n,8280)),"@site/docs/04-absint-framework.md",8280],"5bb07cf5":[()=>n.e(6576).then(n.bind(n,60)),"@site/docs/checker-lineage.md",60],"5bb3de56":[()=>n.e(8012).then(n.bind(n,6909)),"@site/versioned_docs/version-1.0.0/checker-loop-hoisting.md",6909],"5c9e12d1":[()=>n.e(1260).then(n.t.bind(n,590,19)),"/home/runner/work/infer/infer/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",590],"5e95c892":[()=>n.e(4304).then(n.bind(n,3564)),"@theme/DocsRoot",3564],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,7768)),"@generated/docusaurus.config",7768],"5f403532":[()=>n.e(5008).then(n.bind(n,9228)),"@site/docs/01-steps-for-ci.md",9228],"6021085e":[()=>n.e(4217).then(n.bind(n,1380)),"@site/docs/man-infer-debug.md",1380],"6297ff83":[()=>n.e(4824).then(n.bind(n,9680)),"@site/docs/man-infer-compile.md",9680],"62b182e9":[()=>n.e(9064).then(n.bind(n,9884)),"@site/versioned_docs/version-1.0.0/checker-uninit.md",9884],"62e81aa6":[()=>n.e(7664).then(n.t.bind(n,736,19)),"~docs/default/version-1-0-0-metadata-prop-608.json",736],"64cca8ef":[()=>n.e(4486).then(n.bind(n,3052)),"@site/versioned_docs/version-1.1.0/support.md",3052],"64f1f19c":[()=>n.e(1912).then(n.bind(n,820)),"@site/versioned_docs/version-1.1.0/01-analyzing-apps-or-projects.md",820],"671939c9":[()=>n.e(1792).then(n.bind(n,5476)),"@site/versioned_docs/version-1.1.0/02-about-infer.md",5476],"6baf1826":[()=>n.e(2416).then(n.bind(n,4312)),"@site/versioned_docs/version-1.0.0/man-infer-debug.md",4312],"6d752ef5":[()=>n.e(7712).then(n.bind(n,7144)),"@site/versioned_docs/version-1.1.0/checker-cost.md",7144],"70793eb2":[()=>n.e(1660).then(n.bind(n,4232)),"@site/docs/04-internal-API.md",4232],"71a2656f":[()=>n.e(5840).then(n.bind(n,3640)),"@site/versioned_docs/version-1.1.0/man-infer-analyze.md",3640],79263788:[()=>n.e(2356).then(n.bind(n,4932)),"@site/versioned_docs/version-1.1.0/04-internal-API.md",4932],"7b1f0035":[()=>n.e(6040).then(n.bind(n,4584)),"@site/docs/02-about-infer.md",4584],"7d50aa41":[()=>n.e(5708).then(n.bind(n,7612)),"@site/versioned_docs/version-1.0.0/checker-biabduction.md",7612],"7efbfa7e":[()=>n.e(1412).then(n.bind(n,4388)),"@site/docs/man-infer-reportdiff.md",4388],"7f661f82":[()=>n.e(5752).then(n.bind(n,5044)),"@site/versioned_docs/version-1.1.0/01-steps-for-ci.md",5044],"814f3328":[()=>n.e(5512).then(n.t.bind(n,4352,19)),"~blog/default/blog-post-list-prop-default.json",4352],"879f7a7c":[()=>n.e(9096).then(n.bind(n,1404)),"@site/versioned_docs/version-1.0.0/00-getting-started.md",1404],"8919ea97":[()=>n.e(8372).then(n.bind(n,216)),"@site/versioned_docs/version-1.1.0/checker-pulse.md",216],"8a061d83":[()=>n.e(5584).then(n.bind(n,4444)),"@site/versioned_docs/version-1.1.0/checker-printf-args.md",4444],"8db808e7":[()=>n.e(8444).then(n.bind(n,4496)),"@site/versioned_docs/version-1.1.0/01-infer-workflow.md",4496],"8fdeae25":[()=>n.e(6164).then(n.bind(n,7148)),"@site/docs/checker-pulse.md",7148],"9118549b":[()=>n.e(2008).then(n.bind(n,1908)),"@site/docs/checker-quandary.md",1908],92185360:[()=>n.e(6416).then(n.bind(n,6752)),"@site/versioned_docs/version-1.0.0/man-infer-capture.md",6752],"9242256d":[()=>n.e(1080).then(n.bind(n,2180)),"@site/versioned_docs/version-1.0.0/man-infer-run.md",2180],"9258f162":[()=>n.e(379).then(n.bind(n,6408)),"@site/versioned_docs/version-1.1.0/checker-uninit.md",6408],"935f2afb":[()=>n.e(5696).then(n.t.bind(n,5988,19)),"~docs/default/version-current-metadata-prop-751.json",5988],"937dc5a6":[()=>n.e(2728).then(n.bind(n,7528)),"@site/docs/checker-parameter-not-null-checked.md",7528],"9702a600":[()=>n.e(8808).then(n.bind(n,6696)),"@site/blog/2016-04-07-mobileatscale-london-talk.md?truncated=true",6696],"99b7fc87":[()=>n.e(7180).then(n.bind(n,3951)),"@site/versioned_docs/version-1.0.0/02-about-infer.md",3951],"99c7964b":[()=>n.e(3048).then(n.bind(n,7112)),"@site/docs/checker-siof.md",7112],"9a49882e":[()=>n.e(2872).then(n.bind(n,2576)),"@site/versioned_docs/version-1.0.0/checker-cost.md",2576],"9d221b96":[()=>n.e(4184).then(n.bind(n,7704)),"@site/versioned_docs/version-1.1.0/checker-self-in-block.md",7704],"9d4bdb35":[()=>n.e(2708).then(n.bind(n,480)),"@site/versioned_docs/version-1.1.0/checker-resource-leak-lab.md",480],"9e4087bc":[()=>n.e(7028).then(n.bind(n,6140)),"@theme/BlogArchivePage",6140],a02168a2:[()=>n.e(8858).then(n.bind(n,5088)),"@site/versioned_docs/version-1.1.0/man-infer-help.md",5088],a2bed8f0:[()=>n.e(8392).then(n.bind(n,140)),"@site/docs/man-infer-analyze.md",140],a33b6a74:[()=>n.e(3596).then(n.bind(n,2324)),"@site/docs/checker-fragment-retains-view.md",2324],a373fd77:[()=>n.e(4308).then(n.bind(n,6340)),"@site/docs/checker-inefficient-keyset-iterator.md",6340],a5a260f1:[()=>n.e(2096).then(n.bind(n,4944)),"@site/blog/2016-04-07-mobileatscale-london-talk.md",4944],a6aa9e1f:[()=>Promise.all([n.e(2176),n.e(9116),n.e(606),n.e(4976)]).then(n.bind(n,4236)),"@theme/BlogListPage",4236],a6f42423:[()=>n.e(7552).then(n.bind(n,9944)),"@site/versioned_docs/version-1.0.0/01-man-pages.md",9944],a78783ee:[()=>n.e(4220).then(n.bind(n,6912)),"@site/versioned_docs/version-1.0.0/01-advanced-features.md",6912],a7bd4aaa:[()=>n.e(6500).then(n.bind(n,2e3)),"@theme/DocVersionRoot",2e3],a90afd08:[()=>n.e(8532).then(n.bind(n,5608)),"@site/versioned_docs/version-1.0.0/checker-topl-pulse.md",5608],a94703ab:[()=>Promise.all([n.e(2176),n.e(4666)]).then(n.bind(n,996)),"@theme/DocRoot",996],a9946d6a:[()=>n.e(8448).then(n.bind(n,1532)),"@site/versioned_docs/version-1.0.0/00-hello-world.md",1532],aa0b35eb:[()=>n.e(8176).then(n.bind(n,6844)),"@site/blog/2016-08-30-curryon-rome-talk.md",6844],aae2c465:[()=>n.e(4152).then(n.bind(n,6516)),"@site/versioned_docs/version-1.0.0/man-infer-analyze.md",6516],aaff9110:[()=>n.e(7208).then(n.bind(n,2744)),"@site/versioned_docs/version-1.1.0/man-infer-reportdiff.md",2744],ab17452f:[()=>n.e(3840).then(n.bind(n,9484)),"@site/versioned_docs/version-1.1.0/man-infer-explore.md",9484],abc9d724:[()=>n.e(8980).then(n.bind(n,2548)),"@site/versioned_docs/version-1.1.0/man-infer-capture.md",2548],acaf655c:[()=>n.e(5680).then(n.bind(n,7732)),"@site/versioned_docs/version-1.1.0/00-getting-started.md",7732],acb2d06a:[()=>n.e(7996).then(n.bind(n,2024)),"@site/blog/2016-06-23-first-opensourceversary.md?truncated=true",2024],ae565638:[()=>n.e(3132).then(n.bind(n,644)),"@site/versioned_docs/version-1.1.0/checker-impurity.md",644],af0818da:[()=>n.e(4156).then(n.t.bind(n,6792,19)),"/home/runner/work/infer/infer/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",6792],af0d8a1e:[()=>n.e(2012).then(n.bind(n,64)),"@site/versioned_docs/version-1.0.0/01-infer-workflow.md",64],b065408b:[()=>n.e(8934).then(n.bind(n,4044)),"@site/versioned_docs/version-1.1.0/man-infer-report.md",4044],b2b675dd:[()=>n.e(6292).then(n.t.bind(n,6180,19)),"~blog/default/blog-c06.json",6180],b2f554cd:[()=>n.e(6880).then(n.t.bind(n,8256,19)),"~blog/default/blog-archive-80c.json",8256],b4e1da39:[()=>n.e(1272).then(n.bind(n,5920)),"@site/versioned_docs/version-1.0.0/man-infer-compile.md",5920],b5b9c8e0:[()=>n.e(8252).then(n.bind(n,2936)),"@site/versioned_docs/version-1.0.0/checker-starvation.md",2936],b784ffba:[()=>n.e(6608).then(n.bind(n,76)),"@site/versioned_docs/version-1.0.0/man-infer-help.md",76],b9f8aa82:[()=>n.e(9808).then(n.bind(n,3960)),"@site/docs/man-infer-report.md",3960],bab022f4:[()=>n.e(188).then(n.bind(n,2404)),"@site/docs/01-infer-workflow.md",2404],bbdc39ec:[()=>n.e(3116).then(n.bind(n,1132)),"@site/docs/checker-sil-validation.md",1132],bc318449:[()=>n.e(6748).then(n.bind(n,7436)),"@site/versioned_docs/version-1.0.0/01-steps-for-ci.md",7436],bc3f1a98:[()=>n.e(1200).then(n.bind(n,684)),"@site/versioned_docs/version-1.1.0/man-infer-compile.md",684],bd470307:[()=>n.e(3612).then(n.bind(n,8488)),"@site/docs/checker-self-in-block.md",8488],bd8da646:[()=>n.e(9258).then(n.bind(n,1108)),"@site/versioned_docs/version-1.0.0/checker-topl-biabd.md",1108],be77d225:[()=>n.e(2900).then(n.bind(n,5224)),"@site/versioned_docs/version-1.1.0/04-absint-framework.md",5224],bf6aacca:[()=>n.e(6732).then(n.bind(n,7948)),"@site/versioned_docs/version-1.1.0/all-issue-types.md",7948],c027c09e:[()=>n.e(2764).then(n.bind(n,3732)),"@site/versioned_docs/version-1.0.0/checker-printf-args.md",3732],c14a26e3:[()=>n.e(4616).then(n.bind(n,7868)),"@site/versioned_docs/version-1.0.0/checker-immutable-cast.md",7868],c222a988:[()=>n.e(7332).then(n.bind(n,3276)),"@site/docs/checker-resource-leak-lab.md",3276],c26add1d:[()=>n.e(5048).then(n.bind(n,6420)),"@site/versioned_docs/version-1.1.0/checker-fragment-retains-view.md",6420],c2d67624:[()=>n.e(2124).then(n.bind(n,4752)),"@site/versioned_docs/version-1.0.0/04-internal-API.md",4752],c2f60cfc:[()=>n.e(5868).then(n.bind(n,4848)),"@site/versioned_docs/version-1.0.0/checker-resource-leak-lab.md",4848],c359af60:[()=>n.e(8544).then(n.bind(n,7872)),"@site/docs/all-issue-types.md",7872],c412bf64:[()=>n.e(8608).then(n.bind(n,2116)),"@site/blog/2016-03-17-collaboration-with-spotify.md",2116],c4f5d8e4:[()=>Promise.all([n.e(2176),n.e(2632)]).then(n.bind(n,7540)),"@site/src/pages/index.js",7540],c71502c9:[()=>n.e(5388).then(n.bind(n,1851)),"@site/versioned_docs/version-1.0.0/checker-litho-required-props.md",1851],c7401661:[()=>n.e(1440).then(n.bind(n,9544)),"@site/versioned_docs/version-1.0.0/checker-pulse.md",9544],c8131338:[()=>n.e(9412).then(n.bind(n,1580)),"@site/docs/01-analyzing-apps-or-projects.md",1580],c8a5dae5:[()=>n.e(5516).then(n.bind(n,3393)),"@site/versioned_docs/version-1.1.0/checker-siof.md",3393],ca86781b:[()=>n.e(4856).then(n.bind(n,3916)),"@site/docs/all-checkers.md",3916],cb9da62d:[()=>n.e(7568).then(n.bind(n,1368)),"@site/versioned_docs/version-1.0.0/man-infer-report.md",1368],cbb882cb:[()=>n.e(3448).then(n.bind(n,6580)),"@site/versioned_docs/version-1.0.0/checker-bufferoverrun.md",6580],ccc49370:[()=>Promise.all([n.e(2176),n.e(9116),n.e(606),n.e(6344)]).then(n.bind(n,8320)),"@theme/BlogPostPage",8320],cd83de9e:[()=>n.e(956).then(n.bind(n,6628)),"@site/versioned_docs/version-1.1.0/checker-loop-hoisting.md",6628],ceca19cd:[()=>n.e(980).then(n.bind(n,9716)),"@site/versioned_docs/version-1.0.0/checker-quandary.md",9716],d47ba782:[()=>n.e(9198).then(n.bind(n,5164)),"@site/blog/2015-05-22-Infer-on-open-source-android-apps.md",5164],d9e16301:[()=>n.e(1728).then(n.bind(n,9036)),"@site/docs/support.md",9036],da41ed28:[()=>n.e(5192).then(n.bind(n,5324)),"@site/versioned_docs/version-1.1.0/versions.md",5324],dc4598d0:[()=>n.e(1292).then(n.bind(n,960)),"@site/versioned_docs/version-1.0.0/checker-fragment-retains-view.md",960],ddb8503b:[()=>n.e(3104).then(n.bind(n,7008)),"@site/versioned_docs/version-1.0.0/man-infer.md",7008],def5ef2c:[()=>n.e(3016).then(n.bind(n,5868)),"@site/versioned_docs/version-1.0.0/support.md",5868],df12ff2a:[()=>n.e(6068).then(n.bind(n,5912)),"@site/docs/checker-impurity.md",5912],df53045f:[()=>n.e(7136).then(n.bind(n,5300)),"@site/versioned_docs/version-1.0.0/checker-siof.md",5300],e0f83a1d:[()=>n.e(9032).then(n.bind(n,6816)),"@site/versioned_docs/version-1.1.0/00-hello-world.md",6816],e15bcb33:[()=>n.e(1240).then(n.t.bind(n,6632,19)),"~docs/default/version-1-1-0-metadata-prop-2f9.json",6632],e2e89445:[()=>n.e(1116).then(n.bind(n,8148)),"@site/versioned_docs/version-1.0.0/checker-linters.md",8148],e305a15c:[()=>n.e(8263).then(n.bind(n,2136)),"@site/versioned_docs/version-1.1.0/man-infer-run.md",2136],e436f9fb:[()=>n.e(9396).then(n.bind(n,2216)),"@site/docs/checker-loop-hoisting.md",2216],e44e3f47:[()=>n.e(112).then(n.bind(n,9128)),"@site/versioned_docs/version-1.1.0/checker-inefficient-keyset-iterator.md",9128],e66621bc:[()=>n.e(3600).then(n.bind(n,6700)),"@site/versioned_docs/version-1.1.0/checker-annotation-reachability.md",6700],e6b91a21:[()=>n.e(8601).then(n.bind(n,7272)),"@site/docs/checker-datalog.md",7272],e6b9ef91:[()=>n.e(3280).then(n.bind(n,2836)),"@site/versioned_docs/version-1.1.0/checker-purity.md",2836],e9325e77:[()=>n.e(9656).then(n.bind(n,5860)),"@site/docs/checker-topl.md",5860],eb0c92c1:[()=>n.e(5920).then(n.bind(n,7108)),"@site/versioned_docs/version-1.1.0/checker-racerd.md",7108],f278ac2c:[()=>n.e(3200).then(n.bind(n,2636)),"@site/versioned_docs/version-1.0.0/01-analyzing-apps-or-projects.md",2636],f5711d0d:[()=>n.e(2448).then(n.bind(n,1548)),"@site/versioned_docs/version-1.0.0/checker-impurity.md",1548],f5cfbeab:[()=>n.e(6680).then(n.bind(n,4320)),"@site/versioned_docs/version-1.0.0/checker-config-checks-between-markers.md",4320],f5ff54f0:[()=>n.e(724).then(n.bind(n,1512)),"@site/blog/2016-03-17-collaboration-with-spotify.md?truncated=true",1512],f769b3fd:[()=>n.e(4440).then(n.bind(n,3100)),"@site/docs/checker-config-impact-analysis.md",3100],f8092feb:[()=>n.e(1692).then(n.bind(n,2040)),"@site/versioned_docs/version-1.1.0/checker-immutable-cast.md",2040],fa38ac94:[()=>n.e(3292).then(n.bind(n,8788)),"@site/docs/checker-racerd.md",8788],fa9ab54d:[()=>n.e(3372).then(n.bind(n,3396)),"@site/blog/2016-11-28-atscale16.md",3396],fe661d8a:[()=>n.e(4020).then(n.bind(n,5468)),"@site/versioned_docs/version-1.0.0/checker-eradicate.md",5468],ff0352e3:[()=>n.e(6952).then(n.t.bind(n,4684,19)),"/home/runner/work/infer/infer/website/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",4684]};var s=n(7624);function c(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var l=n(8120),u=n(5548);function d(e,t){if("*"===e)return o()({loading:c,loader:()=>n.e(4552).then(n.bind(n,4552)),modules:["@theme/NotFound"],webpack:()=>[4552],render(e,t){const n=e.default;return(0,s.jsx)(u.Y,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[e+"-"+t],d={},p=[],f=[],h=(0,l.c)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:c,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error("The page component at "+e+" doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.");"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.Y,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","4a5"),exact:!0},{path:"/blog/2015/05/22/Infer-on-open-source-android-apps",component:d("/blog/2015/05/22/Infer-on-open-source-android-apps","b8c"),exact:!0},{path:"/blog/2016/03/17/collaboration-with-spotify",component:d("/blog/2016/03/17/collaboration-with-spotify","139"),exact:!0},{path:"/blog/2016/04/07/mobileatscale-london-talk",component:d("/blog/2016/04/07/mobileatscale-london-talk","47c"),exact:!0},{path:"/blog/2016/06/23/first-opensourceversary",component:d("/blog/2016/06/23/first-opensourceversary","986"),exact:!0},{path:"/blog/2016/08/30/curryon-rome-talk",component:d("/blog/2016/08/30/curryon-rome-talk","d83"),exact:!0},{path:"/blog/2016/11/28/atscale16",component:d("/blog/2016/11/28/atscale16","103"),exact:!0},{path:"/blog/2017/10/20/ocamlformat-released",component:d("/blog/2017/10/20/ocamlformat-released","07d"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","0f9"),exact:!0},{path:"/search",component:d("/search","6d2"),exact:!0},{path:"/docs",component:d("/docs","5c9"),routes:[{path:"/docs/1.0.0",component:d("/docs/1.0.0","5d3"),routes:[{path:"/docs/1.0.0",component:d("/docs/1.0.0","678"),routes:[{path:"/docs/1.0.0/about-Infer",component:d("/docs/1.0.0/about-Infer","b9d"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/absint-framework",component:d("/docs/1.0.0/absint-framework","e0a"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/advanced-features",component:d("/docs/1.0.0/advanced-features","66b"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/all-issue-types",component:d("/docs/1.0.0/all-issue-types","51e"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/analyzing-apps-or-projects",component:d("/docs/1.0.0/analyzing-apps-or-projects","82e"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-annotation-reachability",component:d("/docs/1.0.0/checker-annotation-reachability","139"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-biabduction",component:d("/docs/1.0.0/checker-biabduction","a6a"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-bufferoverrun",component:d("/docs/1.0.0/checker-bufferoverrun","998"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-config-checks-between-markers",component:d("/docs/1.0.0/checker-config-checks-between-markers","1a2"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-cost",component:d("/docs/1.0.0/checker-cost","257"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-eradicate",component:d("/docs/1.0.0/checker-eradicate","414"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-fragment-retains-view",component:d("/docs/1.0.0/checker-fragment-retains-view","c4c"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-immutable-cast",component:d("/docs/1.0.0/checker-immutable-cast","7df"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-impurity",component:d("/docs/1.0.0/checker-impurity","2bb"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-inefficient-keyset-iterator",component:d("/docs/1.0.0/checker-inefficient-keyset-iterator","c58"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-linters",component:d("/docs/1.0.0/checker-linters","5b0"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-litho-required-props",component:d("/docs/1.0.0/checker-litho-required-props","c6c"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-liveness",component:d("/docs/1.0.0/checker-liveness","242"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-loop-hoisting",component:d("/docs/1.0.0/checker-loop-hoisting","b90"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-printf-args",component:d("/docs/1.0.0/checker-printf-args","3c5"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-pulse",component:d("/docs/1.0.0/checker-pulse","3e3"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-purity",component:d("/docs/1.0.0/checker-purity","112"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-quandary",component:d("/docs/1.0.0/checker-quandary","1a8"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-racerd",component:d("/docs/1.0.0/checker-racerd","265"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-resource-leak-lab",component:d("/docs/1.0.0/checker-resource-leak-lab","abb"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-self-in-block",component:d("/docs/1.0.0/checker-self-in-block","d14"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-siof",component:d("/docs/1.0.0/checker-siof","ce7"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-starvation",component:d("/docs/1.0.0/checker-starvation","239"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-topl-biabd",component:d("/docs/1.0.0/checker-topl-biabd","753"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-topl-pulse",component:d("/docs/1.0.0/checker-topl-pulse","dce"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-uninit",component:d("/docs/1.0.0/checker-uninit","e14"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/getting-started",component:d("/docs/1.0.0/getting-started","1a9"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/hello-world",component:d("/docs/1.0.0/hello-world","76d"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/infer-workflow",component:d("/docs/1.0.0/infer-workflow","136"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/internal-API",component:d("/docs/1.0.0/internal-API","3ef"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer",component:d("/docs/1.0.0/man-infer","b1e"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-analyze",component:d("/docs/1.0.0/man-infer-analyze","812"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-capture",component:d("/docs/1.0.0/man-infer-capture","ab4"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-compile",component:d("/docs/1.0.0/man-infer-compile","27a"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-debug",component:d("/docs/1.0.0/man-infer-debug","f4e"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-explore",component:d("/docs/1.0.0/man-infer-explore","c31"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-help",component:d("/docs/1.0.0/man-infer-help","8f2"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-report",component:d("/docs/1.0.0/man-infer-report","3a4"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-reportdiff",component:d("/docs/1.0.0/man-infer-reportdiff","7df"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-run",component:d("/docs/1.0.0/man-infer-run","5ce"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-pages",component:d("/docs/1.0.0/man-pages","e51"),exact:!0},{path:"/docs/1.0.0/separation-logic-and-bi-abduction",component:d("/docs/1.0.0/separation-logic-and-bi-abduction","616"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/steps-for-ci",component:d("/docs/1.0.0/steps-for-ci","60c"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/support",component:d("/docs/1.0.0/support","326"),exact:!0},{path:"/docs/1.0.0/versions",component:d("/docs/1.0.0/versions","87d"),exact:!0,sidebar:"docs"}]}]},{path:"/docs/next",component:d("/docs/next","76e"),routes:[{path:"/docs/next",component:d("/docs/next","34c"),routes:[{path:"/docs/next/about-Infer",component:d("/docs/next/about-Infer","3ed"),exact:!0,sidebar:"docs"},{path:"/docs/next/absint-framework",component:d("/docs/next/absint-framework","c39"),exact:!0,sidebar:"docs"},{path:"/docs/next/all-checkers",component:d("/docs/next/all-checkers","f32"),exact:!0,sidebar:"docs"},{path:"/docs/next/all-issue-types",component:d("/docs/next/all-issue-types","2fc"),exact:!0,sidebar:"docs"},{path:"/docs/next/analyzing-apps-or-projects",component:d("/docs/next/analyzing-apps-or-projects","6ab"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-annotation-reachability",component:d("/docs/next/checker-annotation-reachability","2cc"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-biabduction",component:d("/docs/next/checker-biabduction","075"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-bufferoverrun",component:d("/docs/next/checker-bufferoverrun","3cf"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-config-impact-analysis",component:d("/docs/next/checker-config-impact-analysis","4b3"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-cost",component:d("/docs/next/checker-cost","736"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-datalog",component:d("/docs/next/checker-datalog","a7e"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-fragment-retains-view",component:d("/docs/next/checker-fragment-retains-view","7ef"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-impurity",component:d("/docs/next/checker-impurity","e45"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-inefficient-keyset-iterator",component:d("/docs/next/checker-inefficient-keyset-iterator","62c"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-lineage",component:d("/docs/next/checker-lineage","eba"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-litho-required-props",component:d("/docs/next/checker-litho-required-props","243"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-liveness",component:d("/docs/next/checker-liveness","942"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-loop-hoisting",component:d("/docs/next/checker-loop-hoisting","34f"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-parameter-not-null-checked",component:d("/docs/next/checker-parameter-not-null-checked","433"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-printf-args",component:d("/docs/next/checker-printf-args","07b"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-pulse",component:d("/docs/next/checker-pulse","369"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-purity",component:d("/docs/next/checker-purity","4d2"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-quandary",component:d("/docs/next/checker-quandary","a3c"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-racerd",component:d("/docs/next/checker-racerd","977"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-resource-leak-lab",component:d("/docs/next/checker-resource-leak-lab","44d"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-scope-leakage",component:d("/docs/next/checker-scope-leakage","6dd"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-self-in-block",component:d("/docs/next/checker-self-in-block","590"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-sil-validation",component:d("/docs/next/checker-sil-validation","af7"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-siof",component:d("/docs/next/checker-siof","e35"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-starvation",component:d("/docs/next/checker-starvation","69f"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-topl",component:d("/docs/next/checker-topl","e90"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-uninit",component:d("/docs/next/checker-uninit","725"),exact:!0,sidebar:"docs"},{path:"/docs/next/getting-started",component:d("/docs/next/getting-started","bb6"),exact:!0,sidebar:"docs"},{path:"/docs/next/hello-world",component:d("/docs/next/hello-world","278"),exact:!0,sidebar:"docs"},{path:"/docs/next/infer-workflow",component:d("/docs/next/infer-workflow","98a"),exact:!0,sidebar:"docs"},{path:"/docs/next/internal-API",component:d("/docs/next/internal-API","91a"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer",component:d("/docs/next/man-infer","e41"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-analyze",component:d("/docs/next/man-infer-analyze","918"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-capture",component:d("/docs/next/man-infer-capture","098"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-compile",component:d("/docs/next/man-infer-compile","f52"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-debug",component:d("/docs/next/man-infer-debug","ff5"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-explore",component:d("/docs/next/man-infer-explore","70d"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-help",component:d("/docs/next/man-infer-help","0f0"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-report",component:d("/docs/next/man-infer-report","601"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-reportdiff",component:d("/docs/next/man-infer-reportdiff","fd3"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-run",component:d("/docs/next/man-infer-run","a24"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-pages",component:d("/docs/next/man-pages","d30"),exact:!0},{path:"/docs/next/separation-logic-and-bi-abduction",component:d("/docs/next/separation-logic-and-bi-abduction","b95"),exact:!0,sidebar:"docs"},{path:"/docs/next/steps-for-ci",component:d("/docs/next/steps-for-ci","400"),exact:!0,sidebar:"docs"},{path:"/docs/next/support",component:d("/docs/next/support","104"),exact:!0},{path:"/docs/next/versions",component:d("/docs/next/versions","822"),exact:!0,sidebar:"docs"}]}]},{path:"/docs",component:d("/docs","65a"),routes:[{path:"/docs",component:d("/docs","530"),routes:[{path:"/docs/about-Infer",component:d("/docs/about-Infer","802"),exact:!0,sidebar:"docs"},{path:"/docs/absint-framework",component:d("/docs/absint-framework","767"),exact:!0,sidebar:"docs"},{path:"/docs/all-issue-types",component:d("/docs/all-issue-types","2b2"),exact:!0,sidebar:"docs"},{path:"/docs/analyzing-apps-or-projects",component:d("/docs/analyzing-apps-or-projects","016"),exact:!0,sidebar:"docs"},{path:"/docs/checker-annotation-reachability",component:d("/docs/checker-annotation-reachability","671"),exact:!0,sidebar:"docs"},{path:"/docs/checker-biabduction",component:d("/docs/checker-biabduction","d74"),exact:!0,sidebar:"docs"},{path:"/docs/checker-bufferoverrun",component:d("/docs/checker-bufferoverrun","660"),exact:!0,sidebar:"docs"},{path:"/docs/checker-config-checks-between-markers",component:d("/docs/checker-config-checks-between-markers","0c7"),exact:!0,sidebar:"docs"},{path:"/docs/checker-config-impact-analysis",component:d("/docs/checker-config-impact-analysis","939"),exact:!0,sidebar:"docs"},{path:"/docs/checker-cost",component:d("/docs/checker-cost","39f"),exact:!0,sidebar:"docs"},{path:"/docs/checker-dotnet-resource-leak",component:d("/docs/checker-dotnet-resource-leak","641"),exact:!0,sidebar:"docs"},{path:"/docs/checker-eradicate",component:d("/docs/checker-eradicate","a10"),exact:!0,sidebar:"docs"},{path:"/docs/checker-fragment-retains-view",component:d("/docs/checker-fragment-retains-view","2f2"),exact:!0,sidebar:"docs"},{path:"/docs/checker-immutable-cast",component:d("/docs/checker-immutable-cast","c3f"),exact:!0,sidebar:"docs"},{path:"/docs/checker-impurity",component:d("/docs/checker-impurity","bde"),exact:!0,sidebar:"docs"},{path:"/docs/checker-inefficient-keyset-iterator",component:d("/docs/checker-inefficient-keyset-iterator","aa4"),exact:!0,sidebar:"docs"},{path:"/docs/checker-linters",component:d("/docs/checker-linters","e34"),exact:!0,sidebar:"docs"},{path:"/docs/checker-litho-required-props",component:d("/docs/checker-litho-required-props","7af"),exact:!0,sidebar:"docs"},{path:"/docs/checker-liveness",component:d("/docs/checker-liveness","aab"),exact:!0,sidebar:"docs"},{path:"/docs/checker-loop-hoisting",component:d("/docs/checker-loop-hoisting","c40"),exact:!0,sidebar:"docs"},{path:"/docs/checker-printf-args",component:d("/docs/checker-printf-args","25e"),exact:!0,sidebar:"docs"},{path:"/docs/checker-pulse",component:d("/docs/checker-pulse","7ac"),exact:!0,sidebar:"docs"},{path:"/docs/checker-purity",component:d("/docs/checker-purity","264"),exact:!0,sidebar:"docs"},{path:"/docs/checker-quandary",component:d("/docs/checker-quandary","e3c"),exact:!0,sidebar:"docs"},{path:"/docs/checker-racerd",component:d("/docs/checker-racerd","2c2"),exact:!0,sidebar:"docs"},{path:"/docs/checker-resource-leak-lab",component:d("/docs/checker-resource-leak-lab","f06"),exact:!0,sidebar:"docs"},{path:"/docs/checker-self-in-block",component:d("/docs/checker-self-in-block","04d"),exact:!0,sidebar:"docs"},{path:"/docs/checker-siof",component:d("/docs/checker-siof","8e1"),exact:!0,sidebar:"docs"},{path:"/docs/checker-starvation",component:d("/docs/checker-starvation","8ca"),exact:!0,sidebar:"docs"},{path:"/docs/checker-topl",component:d("/docs/checker-topl","3a9"),exact:!0,sidebar:"docs"},{path:"/docs/checker-uninit",component:d("/docs/checker-uninit","9ba"),exact:!0,sidebar:"docs"},{path:"/docs/getting-started",component:d("/docs/getting-started","73e"),exact:!0,sidebar:"docs"},{path:"/docs/hello-world",component:d("/docs/hello-world","c5e"),exact:!0,sidebar:"docs"},{path:"/docs/infer-workflow",component:d("/docs/infer-workflow","d95"),exact:!0,sidebar:"docs"},{path:"/docs/internal-API",component:d("/docs/internal-API","9a0"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer",component:d("/docs/man-infer","0d0"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-analyze",component:d("/docs/man-infer-analyze","c47"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-capture",component:d("/docs/man-infer-capture","d4b"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-compile",component:d("/docs/man-infer-compile","7a0"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-debug",component:d("/docs/man-infer-debug","6cb"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-explore",component:d("/docs/man-infer-explore","ba9"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-help",component:d("/docs/man-infer-help","353"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-report",component:d("/docs/man-infer-report","fdf"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-reportdiff",component:d("/docs/man-infer-reportdiff","df3"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-run",component:d("/docs/man-infer-run","3bf"),exact:!0,sidebar:"docs"},{path:"/docs/man-pages",component:d("/docs/man-pages","fd1"),exact:!0},{path:"/docs/separation-logic-and-bi-abduction",component:d("/docs/separation-logic-and-bi-abduction","ec0"),exact:!0,sidebar:"docs"},{path:"/docs/steps-for-ci",component:d("/docs/steps-for-ci","a90"),exact:!0,sidebar:"docs"},{path:"/docs/support",component:d("/docs/support","8d4"),exact:!0},{path:"/docs/versions",component:d("/docs/versions","ffe"),exact:!0,sidebar:"docs"}]}]}]},{path:"/",component:d("/","e6a"),exact:!0},{path:"*",component:d("*")}]},240:(e,t,n)=>{"use strict";n.d(t,{e:()=>a,g:()=>i});var r=n(1504),o=n(7624);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},8808:(e,t,n)=>{"use strict";var r=n(1504),o=n(8352),a=n(440),i=n(2160),s=n(8684);const c=[n(7483),n(1462),n(5396),n(1976),n(1496)];var l=n(628),u=n(5592),d=n(5464),p=n(7624);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var h=n(6952),m=n(8264),g=n(964),b=n(1824),y=n(5008),v=n(1616),k=n(204),x=n(4456),w=n(5684),_=n(8712);function S(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,m.c)(),r=(0,v.D)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(h.c,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},"meta-og-"+e.htmlLang)))]})}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.c)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,m.c)(),{pathname:r}=(0,u.IT)();return e+(0,w.applyTrailingSlash)((0,g.c)(r),{trailingSlash:n,baseUrl:t})}(),o=t?""+n+t:r;return(0,p.jsxs)(h.c,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,m.c)(),{metadata:t,image:n}=(0,b.y)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(h.c,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:k.m})]}),n&&(0,p.jsx)(y.U7,{image:n}),(0,p.jsx)(E,{}),(0,p.jsx)(S,{}),(0,p.jsx)(_.c,{tag:x.e6,locale:e}),(0,p.jsx)(h.c,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.C)(l.c,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var j=n(240),N=n(136),L=n(5288);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;rYour Docusaurus site did not load properly.
\nA very common reason is a wrong site baseUrl configuration.
\nCurrent configured baseUrl = '+e+" "+("/"===e?" (default value)":"")+'
\nWe suggest trying baseUrl =
\n{const a=t.toLowerCase(),i=((e,t)=>{const[n,r]=(0,u.useState)(Y(t,e)),o=(0,u.useRef)(),a=(0,u.useRef)();return(0,u.useEffect)((()=>{t===o.current&&e===a.current||(o.current=t,a.current=e,r(Y(t,e)))}),[e,t]),n})(a,r),s=(e=>(0,u.useCallback)((t=>{var n=t,{className:r,style:o,line:a}=n,i=E(n,["className","style","line"]);const s=S(_({},i),{className:(0,d.c)("token-line",r)});return"object"==typeof e&&"plain"in e&&(s.style=e.plain),"object"==typeof o&&(s.style=_(_({},s.style||{}),o)),s}),[e]))(i),c=(e=>{const t=(0,u.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,u.useCallback)((e=>{var n=e,{token:r,className:o,style:a}=n,i=E(n,["token","className","style"]);const s=S(_({},i),{className:(0,d.c)("token",...r.types,o),children:r.content,style:t(r)});return null!=a&&(s.style=_(_({},s.style||{}),a)),s}),[t])})(i),l=(({prism:e,code:t,grammar:n,language:r})=>{const o=(0,u.useRef)(e);return(0,u.useMemo)((()=>{if(null==n)return X([t]);const e={code:t,grammar:n,language:r,tokens:[]};return o.current.hooks.run("before-tokenize",e),e.tokens=o.current.tokenize(t,n),o.current.hooks.run("after-tokenize",e),X(e.tokens)}),[t,n,r])})({prism:o,language:a,code:n,grammar:o.languages[a]});return e({tokens:l,className:`prism-code language-${a}`,style:null!=i?i.root:{},getLineProps:s,getTokenProps:c})},ee=e=>(0,u.createElement)(J,S(_({},e),{prism:e.prism||T,theme:e.theme||$,code:e.code,language:e.language}))},4812:(e,t,n)=>{"use strict";n.d(t,{c:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},144:e=>{"use strict";e.exports={}},4504:e=>{"use strict";e.exports=JSON.parse('{"/blog-4a5":{"__comp":"a6aa9e1f","__context":{"plugin":"af0818da"},"sidebar":"814f3328","items":[{"content":"293e08e8"},{"content":"491a3217"},{"content":"3eb0a99f"},{"content":"acb2d06a"},{"content":"9702a600"},{"content":"f5ff54f0"},{"content":"58de4400"}],"metadata":"b2b675dd"},"/blog/2015/05/22/Infer-on-open-source-android-apps-b8c":{"__comp":"ccc49370","__context":{"plugin":"af0818da"},"sidebar":"814f3328","content":"d47ba782"},"/blog/2016/03/17/collaboration-with-spotify-139":{"__comp":"ccc49370","__context":{"plugin":"af0818da"},"sidebar":"814f3328","content":"c412bf64"},"/blog/2016/04/07/mobileatscale-london-talk-47c":{"__comp":"ccc49370","__context":{"plugin":"af0818da"},"sidebar":"814f3328","content":"a5a260f1"},"/blog/2016/06/23/first-opensourceversary-986":{"__comp":"ccc49370","__context":{"plugin":"af0818da"},"sidebar":"814f3328","content":"00d3276d"},"/blog/2016/08/30/curryon-rome-talk-d83":{"__comp":"ccc49370","__context":{"plugin":"af0818da"},"sidebar":"814f3328","content":"aa0b35eb"},"/blog/2016/11/28/atscale16-103":{"__comp":"ccc49370","__context":{"plugin":"af0818da"},"sidebar":"814f3328","content":"fa9ab54d"},"/blog/2017/10/20/ocamlformat-released-07d":{"__comp":"ccc49370","__context":{"plugin":"af0818da"},"sidebar":"814f3328","content":"3423820d"},"/blog/archive-0f9":{"__comp":"9e4087bc","__context":{"plugin":"af0818da"},"archive":"b2f554cd"},"/search-6d2":{"__comp":"1a4e3797","__context":{"plugin":"ff0352e3"}},"/docs-5c9":{"__comp":"5e95c892","__context":{"plugin":"31868bec"}},"/docs/1.0.0-5d3":{"__comp":"a7bd4aaa","version":"62e81aa6"},"/docs/1.0.0-678":{"__comp":"a94703ab"},"/docs/1.0.0/about-Infer-b9d":{"__comp":"17896441","content":"99b7fc87"},"/docs/1.0.0/absint-framework-e0a":{"__comp":"17896441","content":"43455a69"},"/docs/1.0.0/advanced-features-66b":{"__comp":"17896441","content":"a78783ee"},"/docs/1.0.0/all-issue-types-51e":{"__comp":"17896441","content":"12577cfd"},"/docs/1.0.0/analyzing-apps-or-projects-82e":{"__comp":"17896441","content":"f278ac2c"},"/docs/1.0.0/checker-annotation-reachability-139":{"__comp":"17896441","content":"0ac93784"},"/docs/1.0.0/checker-biabduction-a6a":{"__comp":"17896441","content":"7d50aa41"},"/docs/1.0.0/checker-bufferoverrun-998":{"__comp":"17896441","content":"cbb882cb"},"/docs/1.0.0/checker-config-checks-between-markers-1a2":{"__comp":"17896441","content":"f5cfbeab"},"/docs/1.0.0/checker-cost-257":{"__comp":"17896441","content":"9a49882e"},"/docs/1.0.0/checker-eradicate-414":{"__comp":"17896441","content":"fe661d8a"},"/docs/1.0.0/checker-fragment-retains-view-c4c":{"__comp":"17896441","content":"dc4598d0"},"/docs/1.0.0/checker-immutable-cast-7df":{"__comp":"17896441","content":"c14a26e3"},"/docs/1.0.0/checker-impurity-2bb":{"__comp":"17896441","content":"f5711d0d"},"/docs/1.0.0/checker-inefficient-keyset-iterator-c58":{"__comp":"17896441","content":"4fefa35c"},"/docs/1.0.0/checker-linters-5b0":{"__comp":"17896441","content":"e2e89445"},"/docs/1.0.0/checker-litho-required-props-c6c":{"__comp":"17896441","content":"c71502c9"},"/docs/1.0.0/checker-liveness-242":{"__comp":"17896441","content":"3caf9b73"},"/docs/1.0.0/checker-loop-hoisting-b90":{"__comp":"17896441","content":"5bb3de56"},"/docs/1.0.0/checker-printf-args-3c5":{"__comp":"17896441","content":"c027c09e"},"/docs/1.0.0/checker-pulse-3e3":{"__comp":"17896441","content":"c7401661"},"/docs/1.0.0/checker-purity-112":{"__comp":"17896441","content":"49bfadd9"},"/docs/1.0.0/checker-quandary-1a8":{"__comp":"17896441","content":"ceca19cd"},"/docs/1.0.0/checker-racerd-265":{"__comp":"17896441","content":"15a3954c"},"/docs/1.0.0/checker-resource-leak-lab-abb":{"__comp":"17896441","content":"c2f60cfc"},"/docs/1.0.0/checker-self-in-block-d14":{"__comp":"17896441","content":"495e5e06"},"/docs/1.0.0/checker-siof-ce7":{"__comp":"17896441","content":"df53045f"},"/docs/1.0.0/checker-starvation-239":{"__comp":"17896441","content":"b5b9c8e0"},"/docs/1.0.0/checker-topl-biabd-753":{"__comp":"17896441","content":"bd8da646"},"/docs/1.0.0/checker-topl-pulse-dce":{"__comp":"17896441","content":"a90afd08"},"/docs/1.0.0/checker-uninit-e14":{"__comp":"17896441","content":"62b182e9"},"/docs/1.0.0/getting-started-1a9":{"__comp":"17896441","content":"879f7a7c"},"/docs/1.0.0/hello-world-76d":{"__comp":"17896441","content":"a9946d6a"},"/docs/1.0.0/infer-workflow-136":{"__comp":"17896441","content":"af0d8a1e"},"/docs/1.0.0/internal-API-3ef":{"__comp":"17896441","content":"c2d67624"},"/docs/1.0.0/man-infer-b1e":{"__comp":"17896441","content":"ddb8503b"},"/docs/1.0.0/man-infer-analyze-812":{"__comp":"17896441","content":"aae2c465"},"/docs/1.0.0/man-infer-capture-ab4":{"__comp":"17896441","content":"92185360"},"/docs/1.0.0/man-infer-compile-27a":{"__comp":"17896441","content":"b4e1da39"},"/docs/1.0.0/man-infer-debug-f4e":{"__comp":"17896441","content":"6baf1826"},"/docs/1.0.0/man-infer-explore-c31":{"__comp":"17896441","content":"219c4568"},"/docs/1.0.0/man-infer-help-8f2":{"__comp":"17896441","content":"b784ffba"},"/docs/1.0.0/man-infer-report-3a4":{"__comp":"17896441","content":"cb9da62d"},"/docs/1.0.0/man-infer-reportdiff-7df":{"__comp":"17896441","content":"1db0afb7"},"/docs/1.0.0/man-infer-run-5ce":{"__comp":"17896441","content":"9242256d"},"/docs/1.0.0/man-pages-e51":{"__comp":"17896441","content":"a6f42423"},"/docs/1.0.0/separation-logic-and-bi-abduction-616":{"__comp":"17896441","content":"1460e89b"},"/docs/1.0.0/steps-for-ci-60c":{"__comp":"17896441","content":"bc318449"},"/docs/1.0.0/support-326":{"__comp":"17896441","content":"def5ef2c"},"/docs/1.0.0/versions-87d":{"__comp":"17896441","content":"2ba1d2b8"},"/docs/next-76e":{"__comp":"a7bd4aaa","version":"935f2afb"},"/docs/next-34c":{"__comp":"a94703ab"},"/docs/next/about-Infer-3ed":{"__comp":"17896441","content":"7b1f0035"},"/docs/next/absint-framework-c39":{"__comp":"17896441","content":"5a5dcc21"},"/docs/next/all-checkers-f32":{"__comp":"17896441","content":"ca86781b"},"/docs/next/all-issue-types-2fc":{"__comp":"17896441","content":"c359af60"},"/docs/next/analyzing-apps-or-projects-6ab":{"__comp":"17896441","content":"c8131338"},"/docs/next/checker-annotation-reachability-2cc":{"__comp":"17896441","content":"1c7a9c9f"},"/docs/next/checker-biabduction-075":{"__comp":"17896441","content":"1fdfdeaa"},"/docs/next/checker-bufferoverrun-3cf":{"__comp":"17896441","content":"25a5a20c"},"/docs/next/checker-config-impact-analysis-4b3":{"__comp":"17896441","content":"f769b3fd"},"/docs/next/checker-cost-736":{"__comp":"17896441","content":"1df9637e"},"/docs/next/checker-datalog-a7e":{"__comp":"17896441","content":"e6b91a21"},"/docs/next/checker-fragment-retains-view-7ef":{"__comp":"17896441","content":"a33b6a74"},"/docs/next/checker-impurity-e45":{"__comp":"17896441","content":"df12ff2a"},"/docs/next/checker-inefficient-keyset-iterator-62c":{"__comp":"17896441","content":"a373fd77"},"/docs/next/checker-lineage-eba":{"__comp":"17896441","content":"5bb07cf5"},"/docs/next/checker-litho-required-props-243":{"__comp":"17896441","content":"06d8773d"},"/docs/next/checker-liveness-942":{"__comp":"17896441","content":"3eac2097"},"/docs/next/checker-loop-hoisting-34f":{"__comp":"17896441","content":"e436f9fb"},"/docs/next/checker-parameter-not-null-checked-433":{"__comp":"17896441","content":"937dc5a6"},"/docs/next/checker-printf-args-07b":{"__comp":"17896441","content":"128c6d36"},"/docs/next/checker-pulse-369":{"__comp":"17896441","content":"8fdeae25"},"/docs/next/checker-purity-4d2":{"__comp":"17896441","content":"18328e9e"},"/docs/next/checker-quandary-a3c":{"__comp":"17896441","content":"9118549b"},"/docs/next/checker-racerd-977":{"__comp":"17896441","content":"fa38ac94"},"/docs/next/checker-resource-leak-lab-44d":{"__comp":"17896441","content":"c222a988"},"/docs/next/checker-scope-leakage-6dd":{"__comp":"17896441","content":"556d04db"},"/docs/next/checker-self-in-block-590":{"__comp":"17896441","content":"bd470307"},"/docs/next/checker-sil-validation-af7":{"__comp":"17896441","content":"bbdc39ec"},"/docs/next/checker-siof-e35":{"__comp":"17896441","content":"99c7964b"},"/docs/next/checker-starvation-69f":{"__comp":"17896441","content":"041e4035"},"/docs/next/checker-topl-e90":{"__comp":"17896441","content":"e9325e77"},"/docs/next/checker-uninit-725":{"__comp":"17896441","content":"07d14bbd"},"/docs/next/getting-started-bb6":{"__comp":"17896441","content":"16fe8a4c"},"/docs/next/hello-world-278":{"__comp":"17896441","content":"56ebd09a"},"/docs/next/infer-workflow-98a":{"__comp":"17896441","content":"bab022f4"},"/docs/next/internal-API-91a":{"__comp":"17896441","content":"70793eb2"},"/docs/next/man-infer-e41":{"__comp":"17896441","content":"4dac5fec"},"/docs/next/man-infer-analyze-918":{"__comp":"17896441","content":"a2bed8f0"},"/docs/next/man-infer-capture-098":{"__comp":"17896441","content":"3c055f5e"},"/docs/next/man-infer-compile-f52":{"__comp":"17896441","content":"6297ff83"},"/docs/next/man-infer-debug-ff5":{"__comp":"17896441","content":"6021085e"},"/docs/next/man-infer-explore-70d":{"__comp":"17896441","content":"4c2546f9"},"/docs/next/man-infer-help-0f0":{"__comp":"17896441","content":"21a9d6ed"},"/docs/next/man-infer-report-601":{"__comp":"17896441","content":"b9f8aa82"},"/docs/next/man-infer-reportdiff-fd3":{"__comp":"17896441","content":"7efbfa7e"},"/docs/next/man-infer-run-a24":{"__comp":"17896441","content":"21614072"},"/docs/next/man-pages-d30":{"__comp":"17896441","content":"1dbe42a7"},"/docs/next/separation-logic-and-bi-abduction-b95":{"__comp":"17896441","content":"1906a68b"},"/docs/next/steps-for-ci-400":{"__comp":"17896441","content":"5f403532"},"/docs/next/support-104":{"__comp":"17896441","content":"d9e16301"},"/docs/next/versions-822":{"__comp":"17896441","content":"0fe8a02a"},"/docs-65a":{"__comp":"a7bd4aaa","version":"e15bcb33"},"/docs-530":{"__comp":"a94703ab"},"/docs/about-Infer-802":{"__comp":"17896441","content":"671939c9"},"/docs/absint-framework-767":{"__comp":"17896441","content":"be77d225"},"/docs/all-issue-types-2b2":{"__comp":"17896441","content":"bf6aacca"},"/docs/analyzing-apps-or-projects-016":{"__comp":"17896441","content":"64f1f19c"},"/docs/checker-annotation-reachability-671":{"__comp":"17896441","content":"e66621bc"},"/docs/checker-biabduction-d74":{"__comp":"17896441","content":"34fbd09a"},"/docs/checker-bufferoverrun-660":{"__comp":"17896441","content":"45d37095"},"/docs/checker-config-checks-between-markers-0c7":{"__comp":"17896441","content":"33776668"},"/docs/checker-config-impact-analysis-939":{"__comp":"17896441","content":"509dc7bf"},"/docs/checker-cost-39f":{"__comp":"17896441","content":"6d752ef5"},"/docs/checker-dotnet-resource-leak-641":{"__comp":"17896441","content":"184ad633"},"/docs/checker-eradicate-a10":{"__comp":"17896441","content":"57bcddd6"},"/docs/checker-fragment-retains-view-2f2":{"__comp":"17896441","content":"c26add1d"},"/docs/checker-immutable-cast-c3f":{"__comp":"17896441","content":"f8092feb"},"/docs/checker-impurity-bde":{"__comp":"17896441","content":"ae565638"},"/docs/checker-inefficient-keyset-iterator-aa4":{"__comp":"17896441","content":"e44e3f47"},"/docs/checker-linters-e34":{"__comp":"17896441","content":"420497a2"},"/docs/checker-litho-required-props-7af":{"__comp":"17896441","content":"0c0efcaa"},"/docs/checker-liveness-aab":{"__comp":"17896441","content":"04f8d6af"},"/docs/checker-loop-hoisting-c40":{"__comp":"17896441","content":"cd83de9e"},"/docs/checker-printf-args-25e":{"__comp":"17896441","content":"8a061d83"},"/docs/checker-pulse-7ac":{"__comp":"17896441","content":"8919ea97"},"/docs/checker-purity-264":{"__comp":"17896441","content":"e6b9ef91"},"/docs/checker-quandary-e3c":{"__comp":"17896441","content":"1d8647da"},"/docs/checker-racerd-2c2":{"__comp":"17896441","content":"eb0c92c1"},"/docs/checker-resource-leak-lab-f06":{"__comp":"17896441","content":"9d4bdb35"},"/docs/checker-self-in-block-04d":{"__comp":"17896441","content":"9d221b96"},"/docs/checker-siof-8e1":{"__comp":"17896441","content":"c8a5dae5"},"/docs/checker-starvation-8ca":{"__comp":"17896441","content":"3f2a1ecb"},"/docs/checker-topl-3a9":{"__comp":"17896441","content":"3d9729af"},"/docs/checker-uninit-9ba":{"__comp":"17896441","content":"9258f162"},"/docs/getting-started-73e":{"__comp":"17896441","content":"acaf655c"},"/docs/hello-world-c5e":{"__comp":"17896441","content":"e0f83a1d"},"/docs/infer-workflow-d95":{"__comp":"17896441","content":"8db808e7"},"/docs/internal-API-9a0":{"__comp":"17896441","content":"79263788"},"/docs/man-infer-0d0":{"__comp":"17896441","content":"3c741b47"},"/docs/man-infer-analyze-c47":{"__comp":"17896441","content":"71a2656f"},"/docs/man-infer-capture-d4b":{"__comp":"17896441","content":"abc9d724"},"/docs/man-infer-compile-7a0":{"__comp":"17896441","content":"bc3f1a98"},"/docs/man-infer-debug-6cb":{"__comp":"17896441","content":"0346afaa"},"/docs/man-infer-explore-ba9":{"__comp":"17896441","content":"ab17452f"},"/docs/man-infer-help-353":{"__comp":"17896441","content":"a02168a2"},"/docs/man-infer-report-fdf":{"__comp":"17896441","content":"b065408b"},"/docs/man-infer-reportdiff-df3":{"__comp":"17896441","content":"aaff9110"},"/docs/man-infer-run-3bf":{"__comp":"17896441","content":"e305a15c"},"/docs/man-pages-fd1":{"__comp":"17896441","content":"3c653e3b"},"/docs/separation-logic-and-bi-abduction-ec0":{"__comp":"17896441","content":"413f2abb"},"/docs/steps-for-ci-a90":{"__comp":"17896441","content":"7f661f82"},"/docs/support-8d4":{"__comp":"17896441","content":"64cca8ef"},"/docs/versions-ffe":{"__comp":"17896441","content":"da41ed28"},"/-e6a":{"__comp":"c4f5d8e4","__context":{"plugin":"5c9e12d1"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[2176],(()=>{return t=8808,e(e.s=t);var t}));e.O()}]);
\ No newline at end of file
diff --git a/assets/js/main.c71ddf7a.js b/assets/js/main.c71ddf7a.js
new file mode 100644
index 00000000000..2217fb612ca
--- /dev/null
+++ b/assets/js/main.c71ddf7a.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.c71ddf7a.js.LICENSE.txt */
+(self.webpackChunk=self.webpackChunk||[]).push([[1590],{5052:(e,t,n)=>{"use strict";n.d(t,{I:()=>o});var r=n(1504);function o(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},628:(e,t,n)=>{"use strict";n.d(t,{c:()=>p});n(1504);var r=n(8852),o=n.n(r),a=n(4504);const i={"00d3276d":[()=>n.e(2068).then(n.bind(n,9436)),"@site/blog/2016-06-23-first-opensourceversary.md",9436],"0346afaa":[()=>n.e(1352).then(n.bind(n,6264)),"@site/versioned_docs/version-1.1.0/man-infer-debug.md",6264],"041e4035":[()=>n.e(1624).then(n.bind(n,1292)),"@site/docs/checker-starvation.md",1292],"04f8d6af":[()=>n.e(9728).then(n.bind(n,3796)),"@site/versioned_docs/version-1.1.0/checker-liveness.md",3796],"06d8773d":[()=>n.e(8384).then(n.bind(n,3380)),"@site/docs/checker-litho-required-props.md",3380],"0ac93784":[()=>n.e(7296).then(n.bind(n,308)),"@site/versioned_docs/version-1.0.0/checker-annotation-reachability.md",308],"0c0efcaa":[()=>n.e(8528).then(n.bind(n,3924)),"@site/versioned_docs/version-1.1.0/checker-litho-required-props.md",3924],"0fe8a02a":[()=>n.e(6452).then(n.bind(n,9684)),"@site/docs/versions.md",9684],"12577cfd":[()=>n.e(3128).then(n.bind(n,1624)),"@site/versioned_docs/version-1.0.0/all-issue-types.md",1624],"128c6d36":[()=>n.e(7840).then(n.bind(n,4964)),"@site/docs/checker-printf-args.md",4964],"1460e89b":[()=>n.e(1008).then(n.bind(n,5728)),"@site/versioned_docs/version-1.0.0/02-separation-logic-and-biabduction.md",5728],"15a3954c":[()=>n.e(6322).then(n.bind(n,1708)),"@site/versioned_docs/version-1.0.0/checker-racerd.md",1708],"16fe8a4c":[()=>n.e(920).then(n.bind(n,7820)),"@site/docs/00-getting-started.md",7820],17896441:[()=>Promise.all([n.e(2176),n.e(9116),n.e(6752)]).then(n.bind(n,5104)),"@theme/DocItem",5104],"18328e9e":[()=>n.e(7952).then(n.bind(n,7480)),"@site/docs/checker-purity.md",7480],"184ad633":[()=>n.e(208).then(n.bind(n,7168)),"@site/versioned_docs/version-1.1.0/checker-dotnet-resource-leak.md",7168],"1906a68b":[()=>n.e(8928).then(n.bind(n,2428)),"@site/docs/02-separation-logic-and-biabduction.md",2428],"1a4e3797":[()=>Promise.all([n.e(2176),n.e(9648)]).then(n.bind(n,3416)),"@theme/SearchPage",3416],"1c7a9c9f":[()=>n.e(9792).then(n.bind(n,9804)),"@site/docs/checker-annotation-reachability.md",9804],"1d8647da":[()=>n.e(5336).then(n.bind(n,192)),"@site/versioned_docs/version-1.1.0/checker-quandary.md",192],"1db0afb7":[()=>n.e(3876).then(n.bind(n,5500)),"@site/versioned_docs/version-1.0.0/man-infer-reportdiff.md",5500],"1dbe42a7":[()=>n.e(3796).then(n.bind(n,400)),"@site/docs/01-man-pages.md",400],"1df9637e":[()=>n.e(7948).then(n.bind(n,9708)),"@site/docs/checker-cost.md",9708],"1fdfdeaa":[()=>n.e(1085).then(n.bind(n,9652)),"@site/docs/checker-biabduction.md",9652],21614072:[()=>n.e(172).then(n.bind(n,6976)),"@site/docs/man-infer-run.md",6976],"219c4568":[()=>n.e(1088).then(n.bind(n,7e3)),"@site/versioned_docs/version-1.0.0/man-infer-explore.md",7e3],"21a9d6ed":[()=>n.e(1672).then(n.bind(n,5776)),"@site/docs/man-infer-help.md",5776],"25a5a20c":[()=>n.e(6180).then(n.bind(n,3620)),"@site/docs/checker-bufferoverrun.md",3620],"293e08e8":[()=>n.e(9700).then(n.bind(n,4952)),"@site/blog/2017-10-20-ocamlformat-released.md?truncated=true",4952],"2ba1d2b8":[()=>n.e(7724).then(n.bind(n,832)),"@site/versioned_docs/version-1.0.0/versions.md",832],"31868bec":[()=>n.e(6868).then(n.t.bind(n,2080,19)),"/home/runner/work/infer/infer/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",2080],33776668:[()=>n.e(8906).then(n.bind(n,3192)),"@site/versioned_docs/version-1.1.0/checker-config-checks-between-markers.md",3192],"3423820d":[()=>n.e(2756).then(n.bind(n,1916)),"@site/blog/2017-10-20-ocamlformat-released.md",1916],"34fbd09a":[()=>n.e(9456).then(n.bind(n,3811)),"@site/versioned_docs/version-1.1.0/checker-biabduction.md",3811],"3c055f5e":[()=>n.e(7920).then(n.bind(n,596)),"@site/docs/man-infer-capture.md",596],"3c653e3b":[()=>n.e(904).then(n.bind(n,5845)),"@site/versioned_docs/version-1.1.0/01-man-pages.md",5845],"3c741b47":[()=>n.e(644).then(n.bind(n,868)),"@site/versioned_docs/version-1.1.0/man-infer.md",868],"3caf9b73":[()=>n.e(3043).then(n.bind(n,5660)),"@site/versioned_docs/version-1.0.0/checker-liveness.md",5660],"3d9729af":[()=>n.e(7192).then(n.bind(n,3676)),"@site/versioned_docs/version-1.1.0/checker-topl.md",3676],"3eac2097":[()=>n.e(5244).then(n.bind(n,2088)),"@site/docs/checker-liveness.md",2088],"3eb0a99f":[()=>n.e(9400).then(n.bind(n,2753)),"@site/blog/2016-08-30-curryon-rome-talk.md?truncated=true",2753],"3f2a1ecb":[()=>n.e(264).then(n.bind(n,6868)),"@site/versioned_docs/version-1.1.0/checker-starvation.md",6868],"413f2abb":[()=>n.e(2762).then(n.bind(n,8480)),"@site/versioned_docs/version-1.1.0/02-separation-logic-and-biabduction.md",8480],"420497a2":[()=>n.e(2760).then(n.bind(n,2188)),"@site/versioned_docs/version-1.1.0/checker-linters.md",2188],"43455a69":[()=>n.e(6828).then(n.bind(n,9616)),"@site/versioned_docs/version-1.0.0/04-absint-framework.md",9616],"45d37095":[()=>n.e(2200).then(n.bind(n,9880)),"@site/versioned_docs/version-1.1.0/checker-bufferoverrun.md",9880],"491a3217":[()=>n.e(8768).then(n.bind(n,8532)),"@site/blog/2016-11-28-atscale16.md?truncated=true",8532],"495e5e06":[()=>n.e(4072).then(n.bind(n,6436)),"@site/versioned_docs/version-1.0.0/checker-self-in-block.md",6436],"49bfadd9":[()=>n.e(6209).then(n.bind(n,8196)),"@site/versioned_docs/version-1.0.0/checker-purity.md",8196],"4c2546f9":[()=>n.e(4724).then(n.bind(n,9224)),"@site/docs/man-infer-explore.md",9224],"4dac5fec":[()=>n.e(6714).then(n.bind(n,3508)),"@site/docs/man-infer.md",3508],"4fefa35c":[()=>n.e(8916).then(n.bind(n,9892)),"@site/versioned_docs/version-1.0.0/checker-inefficient-keyset-iterator.md",9892],"509dc7bf":[()=>n.e(3044).then(n.bind(n,6804)),"@site/versioned_docs/version-1.1.0/checker-config-impact-analysis.md",6804],"556d04db":[()=>n.e(8008).then(n.bind(n,8804)),"@site/docs/checker-scope-leakage.md",8804],"56ebd09a":[()=>n.e(7012).then(n.bind(n,9424)),"@site/docs/00-hello-world.md",9424],"57bcddd6":[()=>n.e(6730).then(n.bind(n,6256)),"@site/versioned_docs/version-1.1.0/checker-eradicate.md",6256],"58de4400":[()=>n.e(820).then(n.bind(n,6872)),"@site/blog/2015-05-22-Infer-on-open-source-android-apps.md?truncated=true",6872],"5a5dcc21":[()=>n.e(5505).then(n.bind(n,8280)),"@site/docs/04-absint-framework.md",8280],"5bb07cf5":[()=>n.e(6576).then(n.bind(n,60)),"@site/docs/checker-lineage.md",60],"5bb3de56":[()=>n.e(8012).then(n.bind(n,6909)),"@site/versioned_docs/version-1.0.0/checker-loop-hoisting.md",6909],"5c9e12d1":[()=>n.e(1260).then(n.t.bind(n,590,19)),"/home/runner/work/infer/infer/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",590],"5e95c892":[()=>n.e(4304).then(n.bind(n,3564)),"@theme/DocsRoot",3564],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,7768)),"@generated/docusaurus.config",7768],"5f403532":[()=>n.e(5008).then(n.bind(n,9228)),"@site/docs/01-steps-for-ci.md",9228],"6021085e":[()=>n.e(4217).then(n.bind(n,1380)),"@site/docs/man-infer-debug.md",1380],"6297ff83":[()=>n.e(4824).then(n.bind(n,9680)),"@site/docs/man-infer-compile.md",9680],"62b182e9":[()=>n.e(9064).then(n.bind(n,9884)),"@site/versioned_docs/version-1.0.0/checker-uninit.md",9884],"62e81aa6":[()=>n.e(7664).then(n.t.bind(n,736,19)),"~docs/default/version-1-0-0-metadata-prop-608.json",736],"64cca8ef":[()=>n.e(4486).then(n.bind(n,3052)),"@site/versioned_docs/version-1.1.0/support.md",3052],"64f1f19c":[()=>n.e(1912).then(n.bind(n,820)),"@site/versioned_docs/version-1.1.0/01-analyzing-apps-or-projects.md",820],"671939c9":[()=>n.e(1792).then(n.bind(n,5476)),"@site/versioned_docs/version-1.1.0/02-about-infer.md",5476],"6baf1826":[()=>n.e(2416).then(n.bind(n,4312)),"@site/versioned_docs/version-1.0.0/man-infer-debug.md",4312],"6d752ef5":[()=>n.e(7712).then(n.bind(n,7144)),"@site/versioned_docs/version-1.1.0/checker-cost.md",7144],"70793eb2":[()=>n.e(1660).then(n.bind(n,4232)),"@site/docs/04-internal-API.md",4232],"71a2656f":[()=>n.e(5840).then(n.bind(n,3640)),"@site/versioned_docs/version-1.1.0/man-infer-analyze.md",3640],79263788:[()=>n.e(2356).then(n.bind(n,4932)),"@site/versioned_docs/version-1.1.0/04-internal-API.md",4932],"7b1f0035":[()=>n.e(6040).then(n.bind(n,4584)),"@site/docs/02-about-infer.md",4584],"7d50aa41":[()=>n.e(5708).then(n.bind(n,7612)),"@site/versioned_docs/version-1.0.0/checker-biabduction.md",7612],"7efbfa7e":[()=>n.e(1412).then(n.bind(n,4388)),"@site/docs/man-infer-reportdiff.md",4388],"7f661f82":[()=>n.e(5752).then(n.bind(n,5044)),"@site/versioned_docs/version-1.1.0/01-steps-for-ci.md",5044],"814f3328":[()=>n.e(5512).then(n.t.bind(n,4352,19)),"~blog/default/blog-post-list-prop-default.json",4352],"879f7a7c":[()=>n.e(9096).then(n.bind(n,1404)),"@site/versioned_docs/version-1.0.0/00-getting-started.md",1404],"8919ea97":[()=>n.e(8372).then(n.bind(n,216)),"@site/versioned_docs/version-1.1.0/checker-pulse.md",216],"8a061d83":[()=>n.e(5584).then(n.bind(n,4444)),"@site/versioned_docs/version-1.1.0/checker-printf-args.md",4444],"8db808e7":[()=>n.e(8444).then(n.bind(n,4496)),"@site/versioned_docs/version-1.1.0/01-infer-workflow.md",4496],"8fdeae25":[()=>n.e(6164).then(n.bind(n,7148)),"@site/docs/checker-pulse.md",7148],"9118549b":[()=>n.e(2008).then(n.bind(n,1908)),"@site/docs/checker-quandary.md",1908],92185360:[()=>n.e(6416).then(n.bind(n,6752)),"@site/versioned_docs/version-1.0.0/man-infer-capture.md",6752],"9242256d":[()=>n.e(1080).then(n.bind(n,2180)),"@site/versioned_docs/version-1.0.0/man-infer-run.md",2180],"9258f162":[()=>n.e(379).then(n.bind(n,6408)),"@site/versioned_docs/version-1.1.0/checker-uninit.md",6408],"935f2afb":[()=>n.e(5696).then(n.t.bind(n,5988,19)),"~docs/default/version-current-metadata-prop-751.json",5988],"937dc5a6":[()=>n.e(2728).then(n.bind(n,7528)),"@site/docs/checker-parameter-not-null-checked.md",7528],"9702a600":[()=>n.e(8808).then(n.bind(n,6696)),"@site/blog/2016-04-07-mobileatscale-london-talk.md?truncated=true",6696],"99b7fc87":[()=>n.e(7180).then(n.bind(n,3951)),"@site/versioned_docs/version-1.0.0/02-about-infer.md",3951],"99c7964b":[()=>n.e(3048).then(n.bind(n,7112)),"@site/docs/checker-siof.md",7112],"9a49882e":[()=>n.e(2872).then(n.bind(n,2576)),"@site/versioned_docs/version-1.0.0/checker-cost.md",2576],"9d221b96":[()=>n.e(4184).then(n.bind(n,7704)),"@site/versioned_docs/version-1.1.0/checker-self-in-block.md",7704],"9d4bdb35":[()=>n.e(2708).then(n.bind(n,480)),"@site/versioned_docs/version-1.1.0/checker-resource-leak-lab.md",480],"9e4087bc":[()=>n.e(7028).then(n.bind(n,6140)),"@theme/BlogArchivePage",6140],a02168a2:[()=>n.e(8858).then(n.bind(n,5088)),"@site/versioned_docs/version-1.1.0/man-infer-help.md",5088],a2bed8f0:[()=>n.e(8392).then(n.bind(n,140)),"@site/docs/man-infer-analyze.md",140],a33b6a74:[()=>n.e(3596).then(n.bind(n,2324)),"@site/docs/checker-fragment-retains-view.md",2324],a373fd77:[()=>n.e(4308).then(n.bind(n,6340)),"@site/docs/checker-inefficient-keyset-iterator.md",6340],a5a260f1:[()=>n.e(2096).then(n.bind(n,4944)),"@site/blog/2016-04-07-mobileatscale-london-talk.md",4944],a6aa9e1f:[()=>Promise.all([n.e(2176),n.e(9116),n.e(606),n.e(4976)]).then(n.bind(n,4236)),"@theme/BlogListPage",4236],a6f42423:[()=>n.e(7552).then(n.bind(n,9944)),"@site/versioned_docs/version-1.0.0/01-man-pages.md",9944],a78783ee:[()=>n.e(4220).then(n.bind(n,6912)),"@site/versioned_docs/version-1.0.0/01-advanced-features.md",6912],a7bd4aaa:[()=>n.e(6500).then(n.bind(n,2e3)),"@theme/DocVersionRoot",2e3],a90afd08:[()=>n.e(8532).then(n.bind(n,5608)),"@site/versioned_docs/version-1.0.0/checker-topl-pulse.md",5608],a94703ab:[()=>Promise.all([n.e(2176),n.e(4666)]).then(n.bind(n,996)),"@theme/DocRoot",996],a9946d6a:[()=>n.e(8448).then(n.bind(n,1532)),"@site/versioned_docs/version-1.0.0/00-hello-world.md",1532],aa0b35eb:[()=>n.e(8176).then(n.bind(n,6844)),"@site/blog/2016-08-30-curryon-rome-talk.md",6844],aae2c465:[()=>n.e(4152).then(n.bind(n,6516)),"@site/versioned_docs/version-1.0.0/man-infer-analyze.md",6516],aaff9110:[()=>n.e(7208).then(n.bind(n,2744)),"@site/versioned_docs/version-1.1.0/man-infer-reportdiff.md",2744],ab17452f:[()=>n.e(3840).then(n.bind(n,9484)),"@site/versioned_docs/version-1.1.0/man-infer-explore.md",9484],abc9d724:[()=>n.e(8980).then(n.bind(n,2548)),"@site/versioned_docs/version-1.1.0/man-infer-capture.md",2548],acaf655c:[()=>n.e(5680).then(n.bind(n,7732)),"@site/versioned_docs/version-1.1.0/00-getting-started.md",7732],acb2d06a:[()=>n.e(7996).then(n.bind(n,2024)),"@site/blog/2016-06-23-first-opensourceversary.md?truncated=true",2024],ae565638:[()=>n.e(3132).then(n.bind(n,644)),"@site/versioned_docs/version-1.1.0/checker-impurity.md",644],af0818da:[()=>n.e(4156).then(n.t.bind(n,6792,19)),"/home/runner/work/infer/infer/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",6792],af0d8a1e:[()=>n.e(2012).then(n.bind(n,64)),"@site/versioned_docs/version-1.0.0/01-infer-workflow.md",64],b065408b:[()=>n.e(8934).then(n.bind(n,4044)),"@site/versioned_docs/version-1.1.0/man-infer-report.md",4044],b2b675dd:[()=>n.e(6292).then(n.t.bind(n,6180,19)),"~blog/default/blog-c06.json",6180],b2f554cd:[()=>n.e(6880).then(n.t.bind(n,8256,19)),"~blog/default/blog-archive-80c.json",8256],b4e1da39:[()=>n.e(1272).then(n.bind(n,5920)),"@site/versioned_docs/version-1.0.0/man-infer-compile.md",5920],b5b9c8e0:[()=>n.e(8252).then(n.bind(n,2936)),"@site/versioned_docs/version-1.0.0/checker-starvation.md",2936],b784ffba:[()=>n.e(6608).then(n.bind(n,76)),"@site/versioned_docs/version-1.0.0/man-infer-help.md",76],b9f8aa82:[()=>n.e(9808).then(n.bind(n,3960)),"@site/docs/man-infer-report.md",3960],bab022f4:[()=>n.e(188).then(n.bind(n,2404)),"@site/docs/01-infer-workflow.md",2404],bbdc39ec:[()=>n.e(3116).then(n.bind(n,1132)),"@site/docs/checker-sil-validation.md",1132],bc318449:[()=>n.e(6748).then(n.bind(n,7436)),"@site/versioned_docs/version-1.0.0/01-steps-for-ci.md",7436],bc3f1a98:[()=>n.e(1200).then(n.bind(n,684)),"@site/versioned_docs/version-1.1.0/man-infer-compile.md",684],bd470307:[()=>n.e(3612).then(n.bind(n,8488)),"@site/docs/checker-self-in-block.md",8488],bd8da646:[()=>n.e(9258).then(n.bind(n,1108)),"@site/versioned_docs/version-1.0.0/checker-topl-biabd.md",1108],be77d225:[()=>n.e(2900).then(n.bind(n,5224)),"@site/versioned_docs/version-1.1.0/04-absint-framework.md",5224],bf6aacca:[()=>n.e(6732).then(n.bind(n,7948)),"@site/versioned_docs/version-1.1.0/all-issue-types.md",7948],c027c09e:[()=>n.e(2764).then(n.bind(n,3732)),"@site/versioned_docs/version-1.0.0/checker-printf-args.md",3732],c14a26e3:[()=>n.e(4616).then(n.bind(n,7868)),"@site/versioned_docs/version-1.0.0/checker-immutable-cast.md",7868],c222a988:[()=>n.e(7332).then(n.bind(n,3276)),"@site/docs/checker-resource-leak-lab.md",3276],c26add1d:[()=>n.e(5048).then(n.bind(n,6420)),"@site/versioned_docs/version-1.1.0/checker-fragment-retains-view.md",6420],c2d67624:[()=>n.e(2124).then(n.bind(n,4752)),"@site/versioned_docs/version-1.0.0/04-internal-API.md",4752],c2f60cfc:[()=>n.e(5868).then(n.bind(n,4848)),"@site/versioned_docs/version-1.0.0/checker-resource-leak-lab.md",4848],c359af60:[()=>n.e(8544).then(n.bind(n,7872)),"@site/docs/all-issue-types.md",7872],c412bf64:[()=>n.e(8608).then(n.bind(n,2116)),"@site/blog/2016-03-17-collaboration-with-spotify.md",2116],c4f5d8e4:[()=>Promise.all([n.e(2176),n.e(2632)]).then(n.bind(n,7540)),"@site/src/pages/index.js",7540],c71502c9:[()=>n.e(5388).then(n.bind(n,1851)),"@site/versioned_docs/version-1.0.0/checker-litho-required-props.md",1851],c7401661:[()=>n.e(1440).then(n.bind(n,9544)),"@site/versioned_docs/version-1.0.0/checker-pulse.md",9544],c8131338:[()=>n.e(9412).then(n.bind(n,1580)),"@site/docs/01-analyzing-apps-or-projects.md",1580],c8a5dae5:[()=>n.e(5516).then(n.bind(n,3393)),"@site/versioned_docs/version-1.1.0/checker-siof.md",3393],ca86781b:[()=>n.e(4856).then(n.bind(n,3916)),"@site/docs/all-checkers.md",3916],cb9da62d:[()=>n.e(7568).then(n.bind(n,1368)),"@site/versioned_docs/version-1.0.0/man-infer-report.md",1368],cbb882cb:[()=>n.e(3448).then(n.bind(n,6580)),"@site/versioned_docs/version-1.0.0/checker-bufferoverrun.md",6580],ccc49370:[()=>Promise.all([n.e(2176),n.e(9116),n.e(606),n.e(6344)]).then(n.bind(n,8320)),"@theme/BlogPostPage",8320],cd83de9e:[()=>n.e(956).then(n.bind(n,6628)),"@site/versioned_docs/version-1.1.0/checker-loop-hoisting.md",6628],ceca19cd:[()=>n.e(980).then(n.bind(n,9716)),"@site/versioned_docs/version-1.0.0/checker-quandary.md",9716],d47ba782:[()=>n.e(9198).then(n.bind(n,5164)),"@site/blog/2015-05-22-Infer-on-open-source-android-apps.md",5164],d9e16301:[()=>n.e(1728).then(n.bind(n,9036)),"@site/docs/support.md",9036],da41ed28:[()=>n.e(5192).then(n.bind(n,5324)),"@site/versioned_docs/version-1.1.0/versions.md",5324],dc4598d0:[()=>n.e(1292).then(n.bind(n,960)),"@site/versioned_docs/version-1.0.0/checker-fragment-retains-view.md",960],ddb8503b:[()=>n.e(3104).then(n.bind(n,7008)),"@site/versioned_docs/version-1.0.0/man-infer.md",7008],def5ef2c:[()=>n.e(3016).then(n.bind(n,5868)),"@site/versioned_docs/version-1.0.0/support.md",5868],df12ff2a:[()=>n.e(6068).then(n.bind(n,5912)),"@site/docs/checker-impurity.md",5912],df53045f:[()=>n.e(7136).then(n.bind(n,5300)),"@site/versioned_docs/version-1.0.0/checker-siof.md",5300],e0f83a1d:[()=>n.e(9032).then(n.bind(n,6816)),"@site/versioned_docs/version-1.1.0/00-hello-world.md",6816],e15bcb33:[()=>n.e(1240).then(n.t.bind(n,6632,19)),"~docs/default/version-1-1-0-metadata-prop-2f9.json",6632],e2e89445:[()=>n.e(1116).then(n.bind(n,8148)),"@site/versioned_docs/version-1.0.0/checker-linters.md",8148],e305a15c:[()=>n.e(8263).then(n.bind(n,2136)),"@site/versioned_docs/version-1.1.0/man-infer-run.md",2136],e436f9fb:[()=>n.e(9396).then(n.bind(n,2216)),"@site/docs/checker-loop-hoisting.md",2216],e44e3f47:[()=>n.e(112).then(n.bind(n,9128)),"@site/versioned_docs/version-1.1.0/checker-inefficient-keyset-iterator.md",9128],e66621bc:[()=>n.e(3600).then(n.bind(n,6700)),"@site/versioned_docs/version-1.1.0/checker-annotation-reachability.md",6700],e6b91a21:[()=>n.e(8601).then(n.bind(n,7272)),"@site/docs/checker-datalog.md",7272],e6b9ef91:[()=>n.e(3280).then(n.bind(n,2836)),"@site/versioned_docs/version-1.1.0/checker-purity.md",2836],e9325e77:[()=>n.e(9656).then(n.bind(n,5860)),"@site/docs/checker-topl.md",5860],eb0c92c1:[()=>n.e(5920).then(n.bind(n,7108)),"@site/versioned_docs/version-1.1.0/checker-racerd.md",7108],f278ac2c:[()=>n.e(3200).then(n.bind(n,2636)),"@site/versioned_docs/version-1.0.0/01-analyzing-apps-or-projects.md",2636],f5711d0d:[()=>n.e(2448).then(n.bind(n,1548)),"@site/versioned_docs/version-1.0.0/checker-impurity.md",1548],f5cfbeab:[()=>n.e(6680).then(n.bind(n,4320)),"@site/versioned_docs/version-1.0.0/checker-config-checks-between-markers.md",4320],f5ff54f0:[()=>n.e(724).then(n.bind(n,1512)),"@site/blog/2016-03-17-collaboration-with-spotify.md?truncated=true",1512],f769b3fd:[()=>n.e(4440).then(n.bind(n,3100)),"@site/docs/checker-config-impact-analysis.md",3100],f8092feb:[()=>n.e(1692).then(n.bind(n,2040)),"@site/versioned_docs/version-1.1.0/checker-immutable-cast.md",2040],fa38ac94:[()=>n.e(3292).then(n.bind(n,8788)),"@site/docs/checker-racerd.md",8788],fa9ab54d:[()=>n.e(3372).then(n.bind(n,3396)),"@site/blog/2016-11-28-atscale16.md",3396],fe661d8a:[()=>n.e(4020).then(n.bind(n,5468)),"@site/versioned_docs/version-1.0.0/checker-eradicate.md",5468],ff0352e3:[()=>n.e(6952).then(n.t.bind(n,4684,19)),"/home/runner/work/infer/infer/website/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",4684]};var s=n(7624);function c(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var l=n(8120),u=n(5548);function d(e,t){if("*"===e)return o()({loading:c,loader:()=>n.e(4552).then(n.bind(n,4552)),modules:["@theme/NotFound"],webpack:()=>[4552],render(e,t){const n=e.default;return(0,s.jsx)(u.Y,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[e+"-"+t],d={},p=[],f=[],h=(0,l.c)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:c,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error("The page component at "+e+" doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.");"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.Y,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","4a5"),exact:!0},{path:"/blog/2015/05/22/Infer-on-open-source-android-apps",component:d("/blog/2015/05/22/Infer-on-open-source-android-apps","b8c"),exact:!0},{path:"/blog/2016/03/17/collaboration-with-spotify",component:d("/blog/2016/03/17/collaboration-with-spotify","139"),exact:!0},{path:"/blog/2016/04/07/mobileatscale-london-talk",component:d("/blog/2016/04/07/mobileatscale-london-talk","47c"),exact:!0},{path:"/blog/2016/06/23/first-opensourceversary",component:d("/blog/2016/06/23/first-opensourceversary","986"),exact:!0},{path:"/blog/2016/08/30/curryon-rome-talk",component:d("/blog/2016/08/30/curryon-rome-talk","d83"),exact:!0},{path:"/blog/2016/11/28/atscale16",component:d("/blog/2016/11/28/atscale16","103"),exact:!0},{path:"/blog/2017/10/20/ocamlformat-released",component:d("/blog/2017/10/20/ocamlformat-released","07d"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","0f9"),exact:!0},{path:"/search",component:d("/search","6d2"),exact:!0},{path:"/docs",component:d("/docs","59a"),routes:[{path:"/docs/1.0.0",component:d("/docs/1.0.0","5d3"),routes:[{path:"/docs/1.0.0",component:d("/docs/1.0.0","678"),routes:[{path:"/docs/1.0.0/about-Infer",component:d("/docs/1.0.0/about-Infer","b9d"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/absint-framework",component:d("/docs/1.0.0/absint-framework","e0a"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/advanced-features",component:d("/docs/1.0.0/advanced-features","66b"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/all-issue-types",component:d("/docs/1.0.0/all-issue-types","51e"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/analyzing-apps-or-projects",component:d("/docs/1.0.0/analyzing-apps-or-projects","82e"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-annotation-reachability",component:d("/docs/1.0.0/checker-annotation-reachability","139"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-biabduction",component:d("/docs/1.0.0/checker-biabduction","a6a"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-bufferoverrun",component:d("/docs/1.0.0/checker-bufferoverrun","998"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-config-checks-between-markers",component:d("/docs/1.0.0/checker-config-checks-between-markers","1a2"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-cost",component:d("/docs/1.0.0/checker-cost","257"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-eradicate",component:d("/docs/1.0.0/checker-eradicate","414"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-fragment-retains-view",component:d("/docs/1.0.0/checker-fragment-retains-view","c4c"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-immutable-cast",component:d("/docs/1.0.0/checker-immutable-cast","7df"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-impurity",component:d("/docs/1.0.0/checker-impurity","2bb"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-inefficient-keyset-iterator",component:d("/docs/1.0.0/checker-inefficient-keyset-iterator","c58"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-linters",component:d("/docs/1.0.0/checker-linters","5b0"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-litho-required-props",component:d("/docs/1.0.0/checker-litho-required-props","c6c"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-liveness",component:d("/docs/1.0.0/checker-liveness","242"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-loop-hoisting",component:d("/docs/1.0.0/checker-loop-hoisting","b90"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-printf-args",component:d("/docs/1.0.0/checker-printf-args","3c5"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-pulse",component:d("/docs/1.0.0/checker-pulse","3e3"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-purity",component:d("/docs/1.0.0/checker-purity","112"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-quandary",component:d("/docs/1.0.0/checker-quandary","1a8"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-racerd",component:d("/docs/1.0.0/checker-racerd","265"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-resource-leak-lab",component:d("/docs/1.0.0/checker-resource-leak-lab","abb"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-self-in-block",component:d("/docs/1.0.0/checker-self-in-block","d14"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-siof",component:d("/docs/1.0.0/checker-siof","ce7"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-starvation",component:d("/docs/1.0.0/checker-starvation","239"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-topl-biabd",component:d("/docs/1.0.0/checker-topl-biabd","753"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-topl-pulse",component:d("/docs/1.0.0/checker-topl-pulse","dce"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/checker-uninit",component:d("/docs/1.0.0/checker-uninit","e14"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/getting-started",component:d("/docs/1.0.0/getting-started","1a9"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/hello-world",component:d("/docs/1.0.0/hello-world","76d"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/infer-workflow",component:d("/docs/1.0.0/infer-workflow","136"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/internal-API",component:d("/docs/1.0.0/internal-API","3ef"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer",component:d("/docs/1.0.0/man-infer","b1e"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-analyze",component:d("/docs/1.0.0/man-infer-analyze","812"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-capture",component:d("/docs/1.0.0/man-infer-capture","ab4"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-compile",component:d("/docs/1.0.0/man-infer-compile","27a"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-debug",component:d("/docs/1.0.0/man-infer-debug","f4e"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-explore",component:d("/docs/1.0.0/man-infer-explore","c31"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-help",component:d("/docs/1.0.0/man-infer-help","8f2"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-report",component:d("/docs/1.0.0/man-infer-report","3a4"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-reportdiff",component:d("/docs/1.0.0/man-infer-reportdiff","7df"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-infer-run",component:d("/docs/1.0.0/man-infer-run","5ce"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/man-pages",component:d("/docs/1.0.0/man-pages","e51"),exact:!0},{path:"/docs/1.0.0/separation-logic-and-bi-abduction",component:d("/docs/1.0.0/separation-logic-and-bi-abduction","616"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/steps-for-ci",component:d("/docs/1.0.0/steps-for-ci","60c"),exact:!0,sidebar:"docs"},{path:"/docs/1.0.0/support",component:d("/docs/1.0.0/support","326"),exact:!0},{path:"/docs/1.0.0/versions",component:d("/docs/1.0.0/versions","87d"),exact:!0,sidebar:"docs"}]}]},{path:"/docs/next",component:d("/docs/next","037"),routes:[{path:"/docs/next",component:d("/docs/next","480"),routes:[{path:"/docs/next/about-Infer",component:d("/docs/next/about-Infer","3ed"),exact:!0,sidebar:"docs"},{path:"/docs/next/absint-framework",component:d("/docs/next/absint-framework","c39"),exact:!0,sidebar:"docs"},{path:"/docs/next/all-checkers",component:d("/docs/next/all-checkers","f32"),exact:!0,sidebar:"docs"},{path:"/docs/next/all-issue-types",component:d("/docs/next/all-issue-types","2fc"),exact:!0,sidebar:"docs"},{path:"/docs/next/analyzing-apps-or-projects",component:d("/docs/next/analyzing-apps-or-projects","6ab"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-annotation-reachability",component:d("/docs/next/checker-annotation-reachability","2cc"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-biabduction",component:d("/docs/next/checker-biabduction","075"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-bufferoverrun",component:d("/docs/next/checker-bufferoverrun","3cf"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-config-impact-analysis",component:d("/docs/next/checker-config-impact-analysis","4b3"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-cost",component:d("/docs/next/checker-cost","736"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-datalog",component:d("/docs/next/checker-datalog","a7e"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-fragment-retains-view",component:d("/docs/next/checker-fragment-retains-view","7ef"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-impurity",component:d("/docs/next/checker-impurity","e45"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-inefficient-keyset-iterator",component:d("/docs/next/checker-inefficient-keyset-iterator","62c"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-lineage",component:d("/docs/next/checker-lineage","eba"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-litho-required-props",component:d("/docs/next/checker-litho-required-props","243"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-liveness",component:d("/docs/next/checker-liveness","942"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-loop-hoisting",component:d("/docs/next/checker-loop-hoisting","34f"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-parameter-not-null-checked",component:d("/docs/next/checker-parameter-not-null-checked","433"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-printf-args",component:d("/docs/next/checker-printf-args","07b"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-pulse",component:d("/docs/next/checker-pulse","369"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-purity",component:d("/docs/next/checker-purity","4d2"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-quandary",component:d("/docs/next/checker-quandary","a3c"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-racerd",component:d("/docs/next/checker-racerd","977"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-resource-leak-lab",component:d("/docs/next/checker-resource-leak-lab","44d"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-scope-leakage",component:d("/docs/next/checker-scope-leakage","6dd"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-self-in-block",component:d("/docs/next/checker-self-in-block","590"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-sil-validation",component:d("/docs/next/checker-sil-validation","af7"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-siof",component:d("/docs/next/checker-siof","e35"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-starvation",component:d("/docs/next/checker-starvation","69f"),exact:!0,sidebar:"docs"},{path:"/docs/next/checker-topl",component:d("/docs/next/checker-topl","e90"),exact:!0,sidebar:"docs"},{path:"/docs/next/getting-started",component:d("/docs/next/getting-started","bb6"),exact:!0,sidebar:"docs"},{path:"/docs/next/hello-world",component:d("/docs/next/hello-world","278"),exact:!0,sidebar:"docs"},{path:"/docs/next/infer-workflow",component:d("/docs/next/infer-workflow","98a"),exact:!0,sidebar:"docs"},{path:"/docs/next/internal-API",component:d("/docs/next/internal-API","91a"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer",component:d("/docs/next/man-infer","e41"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-analyze",component:d("/docs/next/man-infer-analyze","918"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-capture",component:d("/docs/next/man-infer-capture","098"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-compile",component:d("/docs/next/man-infer-compile","f52"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-debug",component:d("/docs/next/man-infer-debug","ff5"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-explore",component:d("/docs/next/man-infer-explore","70d"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-help",component:d("/docs/next/man-infer-help","0f0"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-report",component:d("/docs/next/man-infer-report","601"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-reportdiff",component:d("/docs/next/man-infer-reportdiff","fd3"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-infer-run",component:d("/docs/next/man-infer-run","a24"),exact:!0,sidebar:"docs"},{path:"/docs/next/man-pages",component:d("/docs/next/man-pages","d30"),exact:!0},{path:"/docs/next/separation-logic-and-bi-abduction",component:d("/docs/next/separation-logic-and-bi-abduction","b95"),exact:!0,sidebar:"docs"},{path:"/docs/next/steps-for-ci",component:d("/docs/next/steps-for-ci","400"),exact:!0,sidebar:"docs"},{path:"/docs/next/support",component:d("/docs/next/support","104"),exact:!0},{path:"/docs/next/versions",component:d("/docs/next/versions","822"),exact:!0,sidebar:"docs"}]}]},{path:"/docs",component:d("/docs","65a"),routes:[{path:"/docs",component:d("/docs","530"),routes:[{path:"/docs/about-Infer",component:d("/docs/about-Infer","802"),exact:!0,sidebar:"docs"},{path:"/docs/absint-framework",component:d("/docs/absint-framework","767"),exact:!0,sidebar:"docs"},{path:"/docs/all-issue-types",component:d("/docs/all-issue-types","2b2"),exact:!0,sidebar:"docs"},{path:"/docs/analyzing-apps-or-projects",component:d("/docs/analyzing-apps-or-projects","016"),exact:!0,sidebar:"docs"},{path:"/docs/checker-annotation-reachability",component:d("/docs/checker-annotation-reachability","671"),exact:!0,sidebar:"docs"},{path:"/docs/checker-biabduction",component:d("/docs/checker-biabduction","d74"),exact:!0,sidebar:"docs"},{path:"/docs/checker-bufferoverrun",component:d("/docs/checker-bufferoverrun","660"),exact:!0,sidebar:"docs"},{path:"/docs/checker-config-checks-between-markers",component:d("/docs/checker-config-checks-between-markers","0c7"),exact:!0,sidebar:"docs"},{path:"/docs/checker-config-impact-analysis",component:d("/docs/checker-config-impact-analysis","939"),exact:!0,sidebar:"docs"},{path:"/docs/checker-cost",component:d("/docs/checker-cost","39f"),exact:!0,sidebar:"docs"},{path:"/docs/checker-dotnet-resource-leak",component:d("/docs/checker-dotnet-resource-leak","641"),exact:!0,sidebar:"docs"},{path:"/docs/checker-eradicate",component:d("/docs/checker-eradicate","a10"),exact:!0,sidebar:"docs"},{path:"/docs/checker-fragment-retains-view",component:d("/docs/checker-fragment-retains-view","2f2"),exact:!0,sidebar:"docs"},{path:"/docs/checker-immutable-cast",component:d("/docs/checker-immutable-cast","c3f"),exact:!0,sidebar:"docs"},{path:"/docs/checker-impurity",component:d("/docs/checker-impurity","bde"),exact:!0,sidebar:"docs"},{path:"/docs/checker-inefficient-keyset-iterator",component:d("/docs/checker-inefficient-keyset-iterator","aa4"),exact:!0,sidebar:"docs"},{path:"/docs/checker-linters",component:d("/docs/checker-linters","e34"),exact:!0,sidebar:"docs"},{path:"/docs/checker-litho-required-props",component:d("/docs/checker-litho-required-props","7af"),exact:!0,sidebar:"docs"},{path:"/docs/checker-liveness",component:d("/docs/checker-liveness","aab"),exact:!0,sidebar:"docs"},{path:"/docs/checker-loop-hoisting",component:d("/docs/checker-loop-hoisting","c40"),exact:!0,sidebar:"docs"},{path:"/docs/checker-printf-args",component:d("/docs/checker-printf-args","25e"),exact:!0,sidebar:"docs"},{path:"/docs/checker-pulse",component:d("/docs/checker-pulse","7ac"),exact:!0,sidebar:"docs"},{path:"/docs/checker-purity",component:d("/docs/checker-purity","264"),exact:!0,sidebar:"docs"},{path:"/docs/checker-quandary",component:d("/docs/checker-quandary","e3c"),exact:!0,sidebar:"docs"},{path:"/docs/checker-racerd",component:d("/docs/checker-racerd","2c2"),exact:!0,sidebar:"docs"},{path:"/docs/checker-resource-leak-lab",component:d("/docs/checker-resource-leak-lab","f06"),exact:!0,sidebar:"docs"},{path:"/docs/checker-self-in-block",component:d("/docs/checker-self-in-block","04d"),exact:!0,sidebar:"docs"},{path:"/docs/checker-siof",component:d("/docs/checker-siof","8e1"),exact:!0,sidebar:"docs"},{path:"/docs/checker-starvation",component:d("/docs/checker-starvation","8ca"),exact:!0,sidebar:"docs"},{path:"/docs/checker-topl",component:d("/docs/checker-topl","3a9"),exact:!0,sidebar:"docs"},{path:"/docs/checker-uninit",component:d("/docs/checker-uninit","9ba"),exact:!0,sidebar:"docs"},{path:"/docs/getting-started",component:d("/docs/getting-started","73e"),exact:!0,sidebar:"docs"},{path:"/docs/hello-world",component:d("/docs/hello-world","c5e"),exact:!0,sidebar:"docs"},{path:"/docs/infer-workflow",component:d("/docs/infer-workflow","d95"),exact:!0,sidebar:"docs"},{path:"/docs/internal-API",component:d("/docs/internal-API","9a0"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer",component:d("/docs/man-infer","0d0"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-analyze",component:d("/docs/man-infer-analyze","c47"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-capture",component:d("/docs/man-infer-capture","d4b"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-compile",component:d("/docs/man-infer-compile","7a0"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-debug",component:d("/docs/man-infer-debug","6cb"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-explore",component:d("/docs/man-infer-explore","ba9"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-help",component:d("/docs/man-infer-help","353"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-report",component:d("/docs/man-infer-report","fdf"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-reportdiff",component:d("/docs/man-infer-reportdiff","df3"),exact:!0,sidebar:"docs"},{path:"/docs/man-infer-run",component:d("/docs/man-infer-run","3bf"),exact:!0,sidebar:"docs"},{path:"/docs/man-pages",component:d("/docs/man-pages","fd1"),exact:!0},{path:"/docs/separation-logic-and-bi-abduction",component:d("/docs/separation-logic-and-bi-abduction","ec0"),exact:!0,sidebar:"docs"},{path:"/docs/steps-for-ci",component:d("/docs/steps-for-ci","a90"),exact:!0,sidebar:"docs"},{path:"/docs/support",component:d("/docs/support","8d4"),exact:!0},{path:"/docs/versions",component:d("/docs/versions","ffe"),exact:!0,sidebar:"docs"}]}]}]},{path:"/",component:d("/","e6a"),exact:!0},{path:"*",component:d("*")}]},240:(e,t,n)=>{"use strict";n.d(t,{e:()=>a,g:()=>i});var r=n(1504),o=n(7624);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},8808:(e,t,n)=>{"use strict";var r=n(1504),o=n(8352),a=n(440),i=n(2160),s=n(8684);const c=[n(7483),n(1462),n(5396),n(1976),n(1496)];var l=n(628),u=n(5592),d=n(5464),p=n(7624);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var h=n(6952),m=n(8264),g=n(964),b=n(1824),y=n(5008),v=n(1616),k=n(204),x=n(4456),w=n(5684),_=n(8712);function S(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,m.c)(),r=(0,v.D)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(h.c,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},"meta-og-"+e.htmlLang)))]})}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.c)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,m.c)(),{pathname:r}=(0,u.IT)();return e+(0,w.applyTrailingSlash)((0,g.c)(r),{trailingSlash:n,baseUrl:t})}(),o=t?""+n+t:r;return(0,p.jsxs)(h.c,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,m.c)(),{metadata:t,image:n}=(0,b.y)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(h.c,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:k.m})]}),n&&(0,p.jsx)(y.U7,{image:n}),(0,p.jsx)(E,{}),(0,p.jsx)(S,{}),(0,p.jsx)(_.c,{tag:x.e6,locale:e}),(0,p.jsx)(h.c,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.C)(l.c,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var j=n(240),N=n(136),L=n(5288);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r Your Docusaurus site did not load properly. A very common reason is a wrong site baseUrl configuration. Current configured baseUrl = '+e+" "+("/"===e?" (default value)":"")+' We suggest trying baseUrl =