1"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([[9437],{41(e,s,n){n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>d});const l=JSON.parse('{"id":"checker-pulse","title":"Pulse","description":"General-purpose memory and value analysis engine.","source":"@site/docs/checker-pulse.md","sourceDirName":".","slug":"/checker-pulse","permalink":"/docs/next/checker-pulse","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"title":"Pulse","description":"General-purpose memory and value analysis engine."},"sidebar":"docs","previous":{"title":"Parameter Not Null Checked","permalink":"/docs/next/checker-parameter-not-null-checked"},"next":{"title":"Purity","permalink":"/docs/next/checker-purity"}}');var i=n(4848),r=n(8453);const t={title:"Pulse",description:"General-purpose memory and value analysis engine."},c=void 0,a={},d=[{value:"What is Infer?",id:"what-is-infer",level:2},{value:"Latent Issues",id:"latent-issues",level:2},{value:"Unknown Functions",id:"unknown-functions",level:2},{value:"Pulse x Nullsafe",id:"pulse-x-nullsafe",level:2},{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function o(e){const s={a:"a",code:"code",em:"em",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.p,{children:"General-purpose memory and value analysis engine."}),"\n",(0,i.jsxs)(s.p,{children:["Activate with ",(0,i.jsx)(s.code,{children:"--pulse"}),"."]}),"\n",(0,i.jsx)(s.p,{children:"Supported languages:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"C/C++/ObjC: Yes"}),"\n",(0,i.jsx)(s.li,{children:"C#/.Net: No"}),"\n",(0,i.jsx)(s.li,{children:"Erlang: Experimental"}),"\n",(0,i.jsx)(s.li,{children:"Hack: Yes"}),"\n",(0,i.jsx)(s.li,{children:"Java: Yes"}),"\n",(0,i.jsx)(s.li,{children:"Python: No"}),"\n",(0,i.jsx)(s.li,{children:"Rust: Experimental"}),"\n",(0,i.jsx)(s.li,{children:"Swift: No"}),"\n"]}),"\n",(0,i.jsxs)(s.h2,{id:"what-is-infer",children:["What is Infer",":Pulse","?"]}),"\n",(0,i.jsxs)(s.p,{children:["Pulse is an interprocedural memory safety analysis. Pulse can detect, for instance, ",(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nullptr_dereference",children:"Null dereferences"})," in Java. Errors are only reported when all conditions on the erroneous path are true regardless of input. An example of a Null dereference found by Pulse is given below."]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-java",children:"class Person {\n Person emergencyContact;\n String address;\n\n Person getEmergencyContact() {\n return this.emergencyContact;\n }\n}\n\nclass Registry {\n void create() {\n Person p = new Person();\n Person c = p.getEmergencyContact();\n // Null dereference here\n System.out.println(c.address);\n }\n\n void printContact(Person p) {\n // No null dereference, as we don't know anything about `p`\n System.out.println(p.getEmergencyContact().address);\n }\n}\n"})}),"\n",(0,i.jsx)(s.p,{children:"How to run pulse for Java:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-bash",children:"infer run --pulse -- javac Test.java\n"})}),"\n",(0,i.jsxs)(s.p,{children:["Pulse reports a Null dereference on this file on ",(0,i.jsx)(s.code,{children:"create()"}),", as it tries to access the field ",(0,i.jsx)(s.code,{children:"address"})," of object ",(0,i.jsx)(s.code,{children:"c"}),", and ",(0,i.jsx)(s.code,{children:"c"})," has value ",(0,i.jsx)(s.code,{children:"null"}),". In contrast, Pulse gives no report for ",(0,i.jsx)(s.code,{children:"printContact(Person p)"}),", as we cannot be sure that ",(0,i.jsx)(s.code,{children:"p.getEmergencyContact()"})," will return ",(0,i.jsx)(s.code,{children:"null"}),". But, thanks to the fact that the analysis is ",(0,i.jsx)(s.em,{children:"inter-procedural"}),", Pulse will report a Null dereference on calls to ",(0,i.jsx)(s.code,{children:"printContact(p)"})," when it detects that ",(0,i.jsx)(s.code,{children:"p"})," is null."]}),"\n",(0,i.jsx)(s.h2,{id:"latent-issues",children:"Latent Issues"}),"\n",(0,i.jsxs)(s.p,{children:["When an error can occur only on some values of the parameters of the current function, Pulse does not report an issue. Such issues are called ",(0,i.jsx)(s.em,{children:"latent"}),". But, if Pulse then sees a call site at which all the conditions for the error are satisfied then the error becomes ",(0,i.jsx)(s.em,{children:"manifest"})," and is reported. This example (in C) illustrates how latent issues are created and then reported when they become manifest:"]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-c",children:"// for more realism, imagine that this function does other things as well\nvoid set_to_null_if_positive(int n, int** p) {\n if (n > 0) {\n *p = NULL;\n }\n}\n\nvoid latent_null_dereference(int n, int* p) {\n set_to_null_if_positive(n, &p);\n *p = 42; // NULL dereference! but only if n >
1 0 so no report yet\n}\n\nvoid manifest_error(int *p) {\n // no way to avoid the bug here => Pulse reports an error\n latent_null_dereference(1, p);\n}\n"})}),"\n",(0,i.jsx)(s.h2,{id:"unknown-functions",children:"Unknown Functions"}),"\n",(0,i.jsx)(s.p,{children:"In order to avoid false positives, Pulse makes optimistic assumptions about calls to unknown functions. Unknown functions (or unknown methods) are functions for which Infer didn't find any code. For example, it could be because the function belongs to a third-party library and we know only its signature, or because a function is made through a function pointer that Pulse wasn't able to resolve to a concrete function. In either case, Pulse will scramble the parts of the state reachable from the parameters of the call. In general, this helps avoid false positives but note that this may cause false negatives as well as false positives:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-c",children:"void unknown(int* p); // third-party code that does [*p = 5]\n // Infer doesn't have access to that code\n\nvoid false_negative() {\n int* x = (int*) malloc(sizeof(int));\n if (x) {\n // unknown call to x makes Pulse forget that x was allocated, in case it frees x\n unknown(x);\n }\n} // no memory leak reported: false negative!\n\nvoid false_positive(int *x) {\n unknown(x); // this sets *x to 5\n if (x != 5) {\n // unreachable\n int* p = NULL;\n *p = 42; // false positive reported here\n }\n}\n"})}),"\n",(0,i.jsx)(s.p,{children:"You can check if a given function called any unknown functions by inspecting its Pulse summary. For example, for the code above:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-console",children:"$ infer --pulse-only -- clang -c unknown_code.c\n No issues found\n$ infer debug --procedures --procedures-filter 'false_negative' --procedures-summary\n...\n skipped_calls={ unknown -> call to skipped function occurs here }\n"})}),"\n",(0,i.jsx)(s.h2,{id:"pulse-x-nullsafe",children:"Pulse x Nullsafe"}),"\n",(0,i.jsxs)(s.p,{children:["Nullsafe is a type checker for ",(0,i.jsx)(s.code,{children:"@Nullable"})," annotations for Java. Classes following the Nullsafe discipline are annotated with ",(0,i.jsx)(s.code,{children:"@Nullsafe"}),"."]}),"\n",(0,i.jsxs)(s.p,{children:["Consider the classes ",(0,i.jsx)(s.code,{children:"Person"})," and ",(0,i.jsx)(s.code,{children:"Registry"})," from the previous example. Assuming that class ",(0,i.jsx)(s.code,{children:"Person"})," is annotated with ",(0,i.jsx)(s.code,{children:"@Nullsafe"}),". In this case, we also annotate ",(0,i.jsx)(s.code,{children:"getEmergencyContact()"})," with ",(0,i.jsx)(s.code,{children:"@Nullable"}),", to make explicit that this method can return the ",(0,i.jsx)(s.code,{children:"null"})," value. There is still the risk that classes depending on ",(0,i.jsx)(s.code,{children:"Person"})," have Null dereferences. In this case, Pulse would report a Null dereference on ",(0,i.jsx)(s.code,{children:"Registry"}),". It could also be the case that class ",(0,i.jsx)(s.code,{children:"Registry"})," is annotated with ",(0,i.jsx)(s.code,{children:"@Nullsafe"}),". By default Pulse reports on ",(0,i.jsx)(s.code,{children:"@Nullsafe"})," files too, see the ",(0,i.jsx)(s.code,{children:"--pulse-nullsafe-report-npe"})," option (Facebook-specific: Pulse does not report on ",(0,i.jsx)(s.code,{children:"@Nullsafe"})," files)."]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-java",children:"@Nullsafe(Nullsafe.Mode.LOCAL)\nclass Person {\n Person emergencyContact;\n String address;\n\n @Nullable Person getEmergencyContact() {\n return this.emergencyContact;\n }\n}\n\nclass Registry {\n ... // Pulse reports here\n}\n"})}),"\n",(0,i.jsx)(s.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,i.jsx)(s.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_arg",children:"BAD_ARG"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_arg_latent",children:"BAD_ARG_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_generator",children:"BAD_GENERATOR"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_generator_latent",children:"BAD_GENERATOR_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_ke
1y",children:"BAD_KEY"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_key_latent",children:"BAD_KEY_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_map",children:"BAD_MAP"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_map_latent",children:"BAD_MAP_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_record",children:"BAD_RECORD"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_record_latent",children:"BAD_RECORD_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_return",children:"BAD_RETURN"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#bad_return_latent",children:"BAD_RETURN_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#compared_to_null_and_dereferenced",children:"COMPARED_TO_NULL_AND_DEREFERENCED"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#config_usage",children:"CONFIG_USAGE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#constant_address_dereference",children:"CONSTANT_ADDRESS_DEREFERENCE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#constant_address_dereference_latent",children:"CONSTANT_ADDRESS_DEREFERENCE_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#data_flow_to_sink",children:"DATA_FLOW_TO_SINK"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#infinite_loop",children:"INFINITE_LOOP"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#infinite_recursion",children:"INFINITE_RECURSION"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#memory_leak_c",children:"MEMORY_LEAK_C"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#memory_leak_cpp",children:"MEMORY_LEAK_CPP"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#missing_nullability_annotation_pulse",children:"MISSING_NULLABILITY_ANNOTATION_PULSE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#mutual_recursion_cycle",children:"MUTUAL_RECURSION_CYCLE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nil_block_call",children:"NIL_BLOCK_CALL"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nil_block_call_latent",children:"NIL_BLOCK_CALL_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nil_insertion_into_collection",children:"NIL_INSERTION_INTO_COLLECTION"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nil_insertion_into_collection_latent",children:"NIL_INSERTION_INTO_COLLECTION_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nil_messaging_to_non_pod",children:"NIL_MESSAGING_TO_NON_POD"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nil_messaging_to_non_pod_latent",children:"NIL_MESSAGING_TO_NON_POD_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_matching_branch_in_try",children:"NO_MATCHING_BRANCH_IN_TRY"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_matching_branch_in_try_latent",children:"NO_MATCHING_BRANCH_IN_TRY_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_matching_case_clause",children:"NO_MATCHING_CASE_CLAUSE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_matching_case_clause_latent",children:"NO_MATCHING_CASE_CLAUSE_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_matching_else_clause",children:"NO_MATCHING_ELSE_CLAUSE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_matching_else_clause_latent",children:"NO_MATCHING_ELSE_CLAUSE_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_matching_function_clause",children:"NO_MATCHING_FUNCTION_CLAUSE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_matching_function_clause_latent",children:"NO_MATCHING_FUNCTION_CLAUSE_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_match_of_rhs",children:"NO_MATCH_OF_RHS"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_match_of_rhs_latent",children:"NO_MATCH_OF_RHS_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_true_branch_in_if",children:"NO_TRUE_BRANCH_IN_IF"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#no_true_branch_in_if_latent",children:"NO_TRUE_BRANCH_IN_IF_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nullptr_dereference",children:"NULLPTR_DEREFERENCE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nullptr_dereference_in_nullsafe_class",children:"NULLPTR_DEREFERENCE_IN_NULLSAFE_CLASS"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nullptr_dereference_in_nullsafe_class_latent",children:"NULLPTR_DEREFERENCE_IN_NULLSAFE_CLASS_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#nullptr_dereference_latent",children:"NULLPTR_DEREFERENCE_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#null_argument",children:"NULL_ARGUMENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#null_argument_latent",children:"NULL_ARGUMENT_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#optional_empty_access",children:"OPTIONAL_EMPTY_ACCESS"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#optional_empty_access_latent",children:"OPTIONAL_EMPTY_ACCESS_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_assertion_error",children:"PULSE_ASSERTION_ERROR"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_cannot_instantiate_abstract_class",children:"PULSE_CANNOT_INSTANTIATE_ABSTRACT_CLASS"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_const_refable",children:"PULSE_CONST_REFABLE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_dict_missing_key",children:"PULSE_DICT_MISSING_KEY"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_dynamic_type_mismatch",children:"PULSE_DYNAMIC_TYPE_MISMATCH"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_readonly_shared_ptr_param",children:"PULSE_READONLY_SHARED_PTR_PARAM"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_reference_stability",children:"PULSE_REFERENCE_STABILITY"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_resource_leak",children:"PULSE_RESOURCE_LEAK"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_transitive_access",children:"PULSE_TRANSITIVE_ACCESS"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unawaited_awaitable",children:"PULSE_UNAWAITED_AWAITABLE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unfinished_builder",children:"PULSE_UNFINISHED_BUILDER"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_uninitialized_const",children:"PULSE_UNINITIALIZED_CONST"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_uninitialized_method",children:"PULSE_UNINITIALIZED_METHOD"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_uninitialized_value",children:"PULSE_UNINITIALIZED_VALUE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy",children:"PULSE_UNNECESSARY_COPY"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_assignment",children:"PULSE_UNNECESSARY_COPY_ASSIGNMENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_assignment_const",children:"PULSE_UNNECESSARY_COPY_ASSIGNMENT_CONST"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_assignment_movable",children:"PULSE_UNNECESSARY_COPY_ASSIGNMENT_MOVABLE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_intermediate",children:"PULSE_UNNECESSARY_COPY_INTERMEDIATE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_intermediate_const",children:"PULSE_UNNECESSARY_COPY_INTERMEDIATE_CONST"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_movable",children:"PULSE_UNNECESSARY_COPY_MOVABLE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_optional",children:"PULSE_UNNECESSARY_COPY_OPTIONAL"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_optional_const",children:"PULSE_UNNECESSARY_COPY_OPTIONAL_CONST"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_return",children:"PULSE_UNNECESSARY_COPY_RETURN"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#pulse_unnecessary_copy_thrift_assignment",children:"PULSE_UNNECESSARY_COPY_THRIFT_ASSIGNMENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#retain_cycle",children:"RETAIN_CYCLE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#retain_cycle_no_weak_info",children:"RETAIN_CYCLE_NO_WEAK_INFO"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#sensitive_data_flow",children:"SENSITIVE_DATA_FLOW"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#stack_variable_address_escape",children:"STACK_VARIABLE_ADDRESS_ESCAPE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#swift_npe",children:"SWIFT_NPE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#swift_npe_latent",children:"SWIFT_NPE_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#taint_error",children:"TAINT_ERROR"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#use_after_delete",children:"USE_AFTER_DELETE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#use_after_delete_latent",children:"USE_AFTER_DELETE_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#use_after_free",children:"USE_AFTER_FREE"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#use_after_free_latent",children:"USE_AFTER_FREE_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#use_after_lifetime",children:"USE_AFTER_LIFETIME"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#use_after_lifetime_latent",children:"USE_AFTER_LIFETIME_LATENT"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#vector_invalidation",children:"VECTOR_INVALIDATION"})}),"\n",(0,i.jsx)(s.li,{children:(0,i.jsx)(s.a,{href:"/docs/next/all-issue-types#vector_invalidation_latent",children:"VECTOR_INVALIDATION_LATENT"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},8453(e,s,n){n.d(s,{R:()=>t,x:()=>c});
1var l=n(6540);const i={},r=l.createContext(i);function t(e){const s=l.useContext(r);return l.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),l.createElement(r.Provider,{value:s},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.