[{"data":1,"prerenderedAt":611},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon03-f":31,"surround-\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon03-f":424,"sidebar-sei-cert-fortran-coding-standard":433},[4,8],{"title":5,"path":6,"_path":6,"fromAppConfig":7},"Home","\u002F",true,{"title":9,"path":10,"children":11,"_path":30,"fromAppConfig":7},"Coding Standards","\u002Fcoding-standards\u002F",[12,15,18,21,24,27],{"title":13,"path":14},"Android Coding Standard","\u002Fandroid-secure-coding-standard\u002F",{"title":16,"path":17},"C Coding Standard","\u002Fsei-cert-c-coding-standard\u002F",{"title":19,"path":20},"C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard\u002F",{"title":22,"path":23},"Fortran Coding Standard","\u002Fsei-cert-fortran-coding-standard\u002F",{"title":25,"path":26},"Java Coding Standard","\u002Fsei-cert-oracle-coding-standard-for-java\u002F",{"title":28,"path":29},"Perl Coding Standard","\u002Fsei-cert-perl-coding-standard\u002F","\u002Fcoding-standards",{"id":32,"title":33,"body":34,"description":44,"extension":418,"meta":419,"navigation":7,"path":420,"seo":421,"stem":422,"__hash__":423},"content\u002F9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F4.con03-f.md","CON03-F. Protect multithreading recurrences to avoid data races",{"type":35,"value":36,"toc":412},"minimark",[37,41,45,48,53,68,173,177,188,278,282,285,348,351,374,378,408],[38,39,33],"h1",{"id":40},"con03-f-protect-multithreading-recurrences-to-avoid-data-races",[42,43,44],"p",{},"Developers should ensure that loop-carried dependencies in multithreaded code are properly protected using synchronization directives or parallel patterns to prevent data races and ensure deterministic behavior.",[42,46,47],{},"A recurrence computation pattern, or loop-carried dependency, occurs when a loop iteration reads or writes to a memory that is also accessed by another iteration. This pattern encompasses both true dependencies (read-after-write) and anti-dependencies (write-after-read). Parallelizing a loop with such dependencies without proper protection can result in data races, producing nondeterministic or inconsistent results.",[49,50,52],"h2",{"id":51},"noncompliant-code-example","Noncompliant Code Example",[42,54,55,56,60,61,64,65,67],{},"In this noncompliant example, an exclusive scan (prefix sum) is parallelized naively. Each iteration of ",[57,58,59],"code",{},"y(i)"," depends on ",[57,62,63],{},"y(i-1)",". When threads execute iterations out of order, a thread may read ",[57,66,63],{}," before it is updated, causing a data race and nondeterministic results.",[69,70,72],"code-block",{"quality":71},"bad",[73,74,79],"pre",{"className":75,"code":76,"language":77,"meta":78,"style":78},"language-fortran shiki shiki-themes github-light-high-contrast github-dark-high-contrast monokai","subroutine scan_risk(x, y)\n  implicit none\n  integer, intent(in) :: x(:)\n  integer, intent(inout) :: y(:)\n  integer :: i\n  \n  y(1) = 0\n  ! Noncompliant: i depends on y(i-1), creating a loop-carried dependency.\n  ! Naive parallelization results in a data race.\n  !$omp parallel do private(i) shared(x, y)\n  do i = 2, size(y, 1)\n    y(i) = y(i - 1) + x(i - 1)\n  end do\n  !$omp end parallel do\nend subroutine scan_risk \n","fortran","",[57,80,81,89,95,101,107,113,119,125,131,137,143,149,155,161,167],{"__ignoreMap":78},[82,83,86],"span",{"class":84,"line":85},"line",1,[82,87,88],{},"subroutine scan_risk(x, y)\n",[82,90,92],{"class":84,"line":91},2,[82,93,94],{},"  implicit none\n",[82,96,98],{"class":84,"line":97},3,[82,99,100],{},"  integer, intent(in) :: x(:)\n",[82,102,104],{"class":84,"line":103},4,[82,105,106],{},"  integer, intent(inout) :: y(:)\n",[82,108,110],{"class":84,"line":109},5,[82,111,112],{},"  integer :: i\n",[82,114,116],{"class":84,"line":115},6,[82,117,118],{},"  \n",[82,120,122],{"class":84,"line":121},7,[82,123,124],{},"  y(1) = 0\n",[82,126,128],{"class":84,"line":127},8,[82,129,130],{},"  ! Noncompliant: i depends on y(i-1), creating a loop-carried dependency.\n",[82,132,134],{"class":84,"line":133},9,[82,135,136],{},"  ! Naive parallelization results in a data race.\n",[82,138,140],{"class":84,"line":139},10,[82,141,142],{},"  !$omp parallel do private(i) shared(x, y)\n",[82,144,146],{"class":84,"line":145},11,[82,147,148],{},"  do i = 2, size(y, 1)\n",[82,150,152],{"class":84,"line":151},12,[82,153,154],{},"    y(i) = y(i - 1) + x(i - 1)\n",[82,156,158],{"class":84,"line":157},13,[82,159,160],{},"  end do\n",[82,162,164],{"class":84,"line":163},14,[82,165,166],{},"  !$omp end parallel do\n",[82,168,170],{"class":84,"line":169},15,[82,171,172],{},"end subroutine scan_risk\n",[49,174,176],{"id":175},"compliant-solution","Compliant Solution",[42,178,179,180,183,184,187],{},"In the compliant solution, prefix sums can be safely parallelized using the ",[57,181,182],{},"scan"," OpenMP directive. The ",[57,185,186],{},"inscan"," reduction type ensures the dependencies are managed by the runtime, providing a happens-before relationship for the intermediate results.",[69,189,191],{"quality":190},"good",[73,192,194],{"className":75,"code":193,"language":77,"meta":78,"style":78},"subroutine scan_safe(x, y)\n  implicit none\n  integer, intent(in) :: x(:)\n  integer, intent(out) :: y(:)\n  integer :: scan_x, i\n  \n  scan_x = 0\n  ! Compliant: Using the inscan reduction and scan directive \n  ! to safely manage the recurrence pattern.\n  !$omp parallel do private(i) reduction(inscan, +:scan_x) shared(x, y)\n  do i = 1, size(y, 1)\n    y(i) = scan_x\n    !$omp scan exclusive(scan_x)\n    scan_x = scan_x + x(i)\n  end do\n  !$omp end parallel do\nend subroutine scan_safe\n",[57,195,196,201,205,209,214,219,223,228,233,238,243,248,253,258,263,267,272],{"__ignoreMap":78},[82,197,198],{"class":84,"line":85},[82,199,200],{},"subroutine scan_safe(x, y)\n",[82,202,203],{"class":84,"line":91},[82,204,94],{},[82,206,207],{"class":84,"line":97},[82,208,100],{},[82,210,211],{"class":84,"line":103},[82,212,213],{},"  integer, intent(out) :: y(:)\n",[82,215,216],{"class":84,"line":109},[82,217,218],{},"  integer :: scan_x, i\n",[82,220,221],{"class":84,"line":115},[82,222,118],{},[82,224,225],{"class":84,"line":121},[82,226,227],{},"  scan_x = 0\n",[82,229,230],{"class":84,"line":127},[82,231,232],{},"  ! Compliant: Using the inscan reduction and scan directive \n",[82,234,235],{"class":84,"line":133},[82,236,237],{},"  ! to safely manage the recurrence pattern.\n",[82,239,240],{"class":84,"line":139},[82,241,242],{},"  !$omp parallel do private(i) reduction(inscan, +:scan_x) shared(x, y)\n",[82,244,245],{"class":84,"line":145},[82,246,247],{},"  do i = 1, size(y, 1)\n",[82,249,250],{"class":84,"line":151},[82,251,252],{},"    y(i) = scan_x\n",[82,254,255],{"class":84,"line":157},[82,256,257],{},"    !$omp scan exclusive(scan_x)\n",[82,259,260],{"class":84,"line":163},[82,261,262],{},"    scan_x = scan_x + x(i)\n",[82,264,265],{"class":84,"line":169},[82,266,160],{},[82,268,270],{"class":84,"line":269},16,[82,271,166],{},[82,273,275],{"class":84,"line":274},17,[82,276,277],{},"end subroutine scan_safe\n",[49,279,281],{"id":280},"risk-assessment","Risk Assessment",[42,283,284],{},"Unprotected recurrences lead to data races that cause data integrity violations and non-deterministic logic errors. This can lead to incorrect state management or exploitable vulnerabilities.",[286,287,288,316],"table",{},[289,290,291],"thead",{},[292,293,294,298,301,304,307,310,313],"tr",{},[295,296,297],"th",{},"Rule",[295,299,300],{},"Severity",[295,302,303],{},"Likelihood",[295,305,306],{},"Detectable",[295,308,309],{},"Repairable",[295,311,312],{},"Priority",[295,314,315],{},"Level",[317,318,319],"tbody",{},[292,320,321,325,328,331,334,337,343],{},[322,323,324],"td",{},"CON03-F",[322,326,327],{},"High",[322,329,330],{},"Likely",[322,332,333],{},"No",[322,335,336],{},"Yes",[322,338,339],{},[340,341,342],"strong",{},"P27",[322,344,345],{},[340,346,347],{},"L1",[349,350],"hr",{},[42,352,353,361,362,361,368],{},[354,355,357],"a",{"href":356},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002Fpre30-c",[358,359],"img",{"src":360},"attachments\u002F629047355\u002F638779595.png"," ",[354,363,365],{"href":364},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002F",[358,366],{"src":367},"attachments\u002F629047355\u002F638779596.png",[354,369,371],{"href":370},"\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp01-f",[358,372],{"src":373},"attachments\u002F629047355\u002F638779597.png",[49,375,377],{"id":376},"attachments","Attachments:",[379,380,384],"div",{"className":381,"align":383},[382],"greybox","left",[42,385,386,361,389,392,393,396,361,398,392,401,403,361,405,392],{},[358,387],{"alt":78,"src":388},"images\u002Ficons\u002Fbullet_blue.gif",[354,390,391],{"href":360},"button_arrow_left.png"," (image\u002Fpng)",[394,395],"br",{},[358,397],{"alt":78,"src":388},[354,399,400],{"href":367},"button_arrow_up.png",[394,402],{},[358,404],{"alt":78,"src":388},[354,406,407],{"href":373},"button_arrow_right.png",[409,410,411],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":78,"searchDepth":91,"depth":91,"links":413},[414,415,416,417],{"id":51,"depth":91,"text":52},{"id":175,"depth":91,"text":176},{"id":280,"depth":91,"text":281},{"id":376,"depth":91,"text":377},"md",{},"\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon03-f",{"title":33,"description":44},"9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F4.con03-f","v-RMxxmVVmGaWZHabBmzFLJsp3BdVKA1I1ODRk_HQIo",[425,429],{"title":426,"path":427,"stem":428,"children":-1},"CON02-F. Protect reduction variables in multithreaded code","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F3.con02-f",{"title":430,"path":431,"stem":432,"children":-1},"CON04-F. Do not use out-of-dimension subscripts in multithreaded code","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon04-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F5.con04-f",[434],{"title":435,"path":436,"stem":437,"children":438},"SEI CERT Fortran Coding Standard","\u002Fsei-cert-fortran-coding-standard","9.sei-cert-fortran-coding-standard\u002F01.index",[439,440,452,607],{"title":435,"path":436,"stem":437},{"title":441,"path":442,"stem":443,"children":444},"Front Matter","\u002Fsei-cert-fortran-coding-standard\u002Ffront-matter","9.sei-cert-fortran-coding-standard\u002F02.front-matter\u002F1.index",[445,446],{"title":441,"path":442,"stem":443},{"title":447,"path":448,"stem":449,"children":450},"Introduction","\u002Fsei-cert-fortran-coding-standard\u002Ffront-matter\u002Fintroduction","9.sei-cert-fortran-coding-standard\u002F02.front-matter\u002F2.introduction\u002F01.index",[451],{"title":447,"path":448,"stem":449},{"title":453,"path":454,"stem":455,"children":456},"Guidelines","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F01.index",[457,458,480,494,511,521,531,549,567,585],{"title":453,"path":454,"stem":455},{"title":459,"path":460,"stem":461,"children":462},"Arrays (ARR)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F1.index",[463,464,468,472,476],{"title":459,"path":460,"stem":461},{"title":465,"path":466,"stem":467},"ARR01-F. Do not use out-of-bounds arrays subscripts","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr\u002Farr01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F2.arr01-f",{"title":469,"path":470,"stem":471},"ARR02-F. Declare array dummy arguments as assumed-shape","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr\u002Farr02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F3.arr02-f",{"title":473,"path":474,"stem":475},"ARR03-F. Specify array bounds when copying data to device memory","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr\u002Farr03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F4.arr03-f",{"title":477,"path":478,"stem":479},"ARR04-F. Ensure arrays ranges mapped to devices cover all accessed elements","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr\u002Farr04-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F5.arr04-f",{"title":481,"path":482,"stem":483,"children":484},"Attribute Declarations and Specifications (ADS)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fattribute-declarations-and-specifications-ads","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.attribute-declarations-and-specifications-ads\u002F1.index",[485,486,490],{"title":481,"path":482,"stem":483},{"title":487,"path":488,"stem":489},"ADS01-F. Explicitly declare pure procedures","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fattribute-declarations-and-specifications-ads\u002Fads01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.attribute-declarations-and-specifications-ads\u002F2.ads01-f",{"title":491,"path":492,"stem":493},"ADS02-F. Separate initialization from declaration to avoid implicit variable persistence","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fattribute-declarations-and-specifications-ads\u002Fads02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.attribute-declarations-and-specifications-ads\u002F2.ads02-f",{"title":495,"path":496,"stem":497,"children":498},"Concurrency (CON)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F1.index",[499,500,504,505,506,507],{"title":495,"path":496,"stem":497},{"title":501,"path":502,"stem":503},"CON01-F. Explicitly declare OpenMP data-sharing attributes for all variables","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F2.con01-f",{"title":426,"path":427,"stem":428},{"title":33,"path":420,"stem":422},{"title":430,"path":431,"stem":432},{"title":508,"path":509,"stem":510},"CON05-F. Ensure correct OpenMP datascoping of variables in parallel regions","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon05-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F6.con05-f",{"title":512,"path":513,"stem":514,"children":515},"Exceptions and IEEE Arithmetic (EIA)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fexceptions-and-ieee-arithmetic-eia","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F05.exceptions-and-ieee-arithmetic-eia\u002F1.index",[516,517],{"title":512,"path":513,"stem":514},{"title":518,"path":519,"stem":520},"EIA01-F. Enforce evaluation order in floating-point expressions","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fexceptions-and-ieee-arithmetic-eia\u002Feia01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F05.exceptions-and-ieee-arithmetic-eia\u002F2.eia01-f",{"title":522,"path":523,"stem":524,"children":525},"Expressions and Assignment (EXA)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fexpressions-and-assignment-exa","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F07.expressions-and-assignment-exa\u002F1.index",[526,527],{"title":522,"path":523,"stem":524},{"title":528,"path":529,"stem":530},"EXA01-F. Do not read uninitialized memory","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fexpressions-and-assignment-exa\u002Fexa01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F07.expressions-and-assignment-exa\u002F2.exa01-f",{"title":532,"path":533,"stem":534,"children":535},"Miscellaneous (MSC)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F1.index",[536,537,541,545],{"title":532,"path":533,"stem":534},{"title":538,"path":539,"stem":540},"MSC01-F. Avoid using legacy or obsolescent Fortran constructs","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc\u002Fmsc01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F2.msc01-f",{"title":542,"path":543,"stem":544},"MSC02-F. Beware of compiler-specific extensions","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc\u002Fmsc02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F3.msc02-f",{"title":546,"path":547,"stem":548},"MSC03-F. Do not depend on undefined behavior","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc\u002Fmsc03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F4.msc03-f",{"title":550,"path":551,"stem":552,"children":553},"Procedures (PRC)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F1.index",[554,555,559,563],{"title":550,"path":551,"stem":552},{"title":556,"path":557,"stem":558},"PRC01-F. Disable the implicit declaration of procedures","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc\u002Fprc01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F2.prc01-f",{"title":560,"path":561,"stem":562},"PRC02-F. Avoid implicit interfaces by using module procedures","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc\u002Fprc02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F3.prc02-f",{"title":564,"path":565,"stem":566},"PRC03-F. Declare the intent for all dummy arguments","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc\u002Fprc03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F4.prc03-f",{"title":568,"path":569,"stem":570,"children":571},"Scope, Association, and Definition (SAD)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fscope-association-and-definition-sad","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F15.scope-association-and-definition-sad\u002F1.index",[572,573,577,581],{"title":568,"path":569,"stem":570},{"title":574,"path":575,"stem":576},"SAD02-F. Minimize imported module entities using the ONLY clause","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fscope-association-and-definition-sad\u002Fsad02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F15.scope-association-and-definition-sad\u002F2.sad02-f",{"title":578,"path":579,"stem":580},"SAD03-F. Replace common block with modules for safer data encapsulation","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fscope-association-and-definition-sad\u002Fsad03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F15.scope-association-and-definition-sad\u002F3.sad03-f",{"title":582,"path":583,"stem":584},"Limit the scope of variables and procedures","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fscope-association-and-definition-sad\u002Flimit-the-scope-of-variables-and-procedures","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F15.scope-association-and-definition-sad\u002F4.limit-the-scope-of-variables-and-procedures",{"title":586,"path":587,"stem":588,"children":589},"Types (TYP)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F1.index",[590,591,595,599,603],{"title":586,"path":587,"stem":588},{"title":592,"path":593,"stem":594},"TYP01-F. Use Intrinsic Assignment for Character Entities","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ\u002Ftyp01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F2.typ01-f",{"title":596,"path":597,"stem":598},"TYP02-F. Prohibit implicit typing in all program units","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ\u002Ftyp02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F3.typ02-f",{"title":600,"path":601,"stem":602},"TYP03-F. Ensure intrinsic function arguments match intended precision","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ\u002Ftyp03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F4.typ03-f",{"title":604,"path":605,"stem":606},"TYP04-F. Centralize kind definitions to ensure consistent precision","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ\u002Ftyp04-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F5.typ04-f",{"title":608,"path":609,"stem":610},"Acknowledgments","\u002Fsei-cert-fortran-coding-standard\u002Facknowledgements","9.sei-cert-fortran-coding-standard\u002Facknowledgements",1783713877459]