[{"data":1,"prerenderedAt":634},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-fortran-coding-standard\u002Fconcurrency-con\u002Fcon03-f":31,"surround-\u002Fsei-cert-fortran-coding-standard\u002Fconcurrency-con\u002Fcon03-f":440,"sidebar-sei-cert-fortran-coding-standard":449},[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":434,"meta":435,"navigation":7,"path":436,"seo":437,"stem":438,"__hash__":439},"content\u002F9.sei-cert-fortran-coding-standard\u002F04.concurrency-con\u002F4.con03-f.md","CON03-F. Protect multithreading recurrences to avoid data races",{"type":35,"value":36,"toc":428},"minimark",[37,41,45,48,53,68,173,177,188,278,282,285,364,367,390,394,424],[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 OpenMP's ",[57,181,182],{},"scan"," 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,309],"table",{},[289,290,291],"thead",{},[292,293,294,297,299,301,303,305,307],"tr",{},[295,296],"th",{},[295,298],{},[295,300],{},[295,302],{},[295,304],{},[295,306],{},[295,308],{},[310,311,312,336],"tbody",{},[292,313,314,318,321,324,327,330,333],{},[315,316,317],"td",{},"Recommendation",[315,319,320],{},"Severity",[315,322,323],{},"Likelihood",[315,325,326],{},"Detectable",[315,328,329],{},"Repairable",[315,331,332],{},"Priority",[315,334,335],{},"Level",[292,337,338,341,344,347,350,353,359],{},[315,339,340],{},"CON03-F",[315,342,343],{},"High",[315,345,346],{},"Likely",[315,348,349],{},"No",[315,351,352],{},"Yes",[315,354,355],{},[356,357,358],"strong",{},"P27",[315,360,361],{},[356,362,363],{},"L1",[365,366],"hr",{},[42,368,369,377,378,377,384],{},[370,371,373],"a",{"href":372},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002Fpre30-c",[374,375],"img",{"src":376},"attachments\u002F629047355\u002F638779595.png"," ",[370,379,381],{"href":380},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002F",[374,382],{"src":383},"attachments\u002F629047355\u002F638779596.png",[370,385,387],{"href":386},"\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp01-f",[374,388],{"src":389},"attachments\u002F629047355\u002F638779597.png",[49,391,393],{"id":392},"attachments","Attachments:",[395,396,400],"div",{"className":397,"align":399},[398],"greybox","left",[42,401,402,377,405,408,409,412,377,414,408,417,419,377,421,408],{},[374,403],{"alt":78,"src":404},"images\u002Ficons\u002Fbullet_blue.gif",[370,406,407],{"href":376},"button_arrow_left.png"," (image\u002Fpng)",[410,411],"br",{},[374,413],{"alt":78,"src":404},[370,415,416],{"href":383},"button_arrow_up.png",[410,418],{},[374,420],{"alt":78,"src":404},[370,422,423],{"href":389},"button_arrow_right.png",[425,426,427],"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":429},[430,431,432,433],{"id":51,"depth":91,"text":52},{"id":175,"depth":91,"text":176},{"id":280,"depth":91,"text":281},{"id":392,"depth":91,"text":393},"md",{},"\u002Fsei-cert-fortran-coding-standard\u002Fconcurrency-con\u002Fcon03-f",{"title":33,"description":44},"9.sei-cert-fortran-coding-standard\u002F04.concurrency-con\u002F4.con03-f","HY72Aec79182vpXxJOg6-x5AeMVWL9HDJgZUjQY4GMo",[441,445],{"title":442,"path":443,"stem":444,"children":-1},"CON02-F. Protect reduction variables in multithreaded code","\u002Fsei-cert-fortran-coding-standard\u002Fconcurrency-con\u002Fcon02-f","9.sei-cert-fortran-coding-standard\u002F04.concurrency-con\u002F3.con02-f",{"title":446,"path":447,"stem":448,"children":-1},"CON04-F. Do not use out-of-dimension subscripts in multithreaded code","\u002Fsei-cert-fortran-coding-standard\u002Fconcurrency-con\u002Fcon04-f","9.sei-cert-fortran-coding-standard\u002F04.concurrency-con\u002F5.con04-f",[450],{"title":451,"path":452,"stem":453,"children":454},"Sei Cert Fortran Coding Standard","\u002Fsei-cert-fortran-coding-standard","9.sei-cert-fortran-coding-standard",[455,458,480,494,511,521,525,535,539,543,547,551,569,587,591,609,630],{"title":456,"path":452,"stem":457},"SEI CERT Fortran Coding Standard","9.sei-cert-fortran-coding-standard\u002F1.index",{"title":459,"path":460,"stem":461,"children":462},"Arrays (ARR)","\u002Fsei-cert-fortran-coding-standard\u002Farrays-arr","9.sei-cert-fortran-coding-standard\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\u002Farrays-arr\u002Farr01-f","9.sei-cert-fortran-coding-standard\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\u002Farrays-arr\u002Farr02-f","9.sei-cert-fortran-coding-standard\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\u002Farrays-arr\u002Farr03-f","9.sei-cert-fortran-coding-standard\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\u002Farrays-arr\u002Farr04-f","9.sei-cert-fortran-coding-standard\u002F02.arrays-arr\u002F5.arr04-f",{"title":481,"path":482,"stem":483,"children":484},"Attribute Declarations and Specifications (ADS)","\u002Fsei-cert-fortran-coding-standard\u002Fattribute-declarations-and-specifications-ads","9.sei-cert-fortran-coding-standard\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\u002Fattribute-declarations-and-specifications-ads\u002Fads01-f","9.sei-cert-fortran-coding-standard\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\u002Fattribute-declarations-and-specifications-ads\u002Fads02-f","9.sei-cert-fortran-coding-standard\u002F03.attribute-declarations-and-specifications-ads\u002F2.ads02-f",{"title":495,"path":496,"stem":497,"children":498},"Concurrency (CON)","\u002Fsei-cert-fortran-coding-standard\u002Fconcurrency-con","9.sei-cert-fortran-coding-standard\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\u002Fconcurrency-con\u002Fcon01-f","9.sei-cert-fortran-coding-standard\u002F04.concurrency-con\u002F2.con01-f",{"title":442,"path":443,"stem":444},{"title":33,"path":436,"stem":438},{"title":446,"path":447,"stem":448},{"title":508,"path":509,"stem":510},"CON05-F. Ensure correct OpenMP datascoping of variables in parallel regions","\u002Fsei-cert-fortran-coding-standard\u002Fconcurrency-con\u002Fcon05-f","9.sei-cert-fortran-coding-standard\u002F04.concurrency-con\u002F6.con05-f",{"title":512,"path":513,"stem":514,"children":515},"Exceptions and IEEE Arithmetic (EIA)","\u002Fsei-cert-fortran-coding-standard\u002Fexceptions-and-ieee-arithmetic-eia","9.sei-cert-fortran-coding-standard\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\u002Fexceptions-and-ieee-arithmetic-eia\u002Feia01-f","9.sei-cert-fortran-coding-standard\u002F05.exceptions-and-ieee-arithmetic-eia\u002F2.eia01-f",{"title":522,"path":523,"stem":524},"Execution Control (EXC)","\u002Fsei-cert-fortran-coding-standard\u002Fexecution-control-exc","9.sei-cert-fortran-coding-standard\u002F06.execution-control-exc",{"title":526,"path":527,"stem":528,"children":529},"Expressions and Assignment (EXA)","\u002Fsei-cert-fortran-coding-standard\u002Fexpressions-and-assignment-exa","9.sei-cert-fortran-coding-standard\u002F07.expressions-and-assignment-exa\u002F1.index",[530,531],{"title":526,"path":527,"stem":528},{"title":532,"path":533,"stem":534},"EXA01-F. Do not read uninitialized memory","\u002Fsei-cert-fortran-coding-standard\u002Fexpressions-and-assignment-exa\u002Fexa01-f","9.sei-cert-fortran-coding-standard\u002F07.expressions-and-assignment-exa\u002F2.exa01-f",{"title":536,"path":537,"stem":538},"Input and Output Editing (IOE)","\u002Fsei-cert-fortran-coding-standard\u002Finput-and-output-editing-ioe","9.sei-cert-fortran-coding-standard\u002F08.input-and-output-editing-ioe",{"title":540,"path":541,"stem":542},"Input and Output Statements (IOS)","\u002Fsei-cert-fortran-coding-standard\u002Finput-and-output-statements-ios","9.sei-cert-fortran-coding-standard\u002F09.input-and-output-statements-ios",{"title":544,"path":545,"stem":546},"Interoperability with C (IWC)","\u002Fsei-cert-fortran-coding-standard\u002Finteroperability-with-c-iwc","9.sei-cert-fortran-coding-standard\u002F10.interoperability-with-c-iwc",{"title":548,"path":549,"stem":550},"Intrinsic Procedures and Modules (IPM)","\u002Fsei-cert-fortran-coding-standard\u002Fintrinsic-procedures-and-modules-ipm","9.sei-cert-fortran-coding-standard\u002F11.intrinsic-procedures-and-modules-ipm",{"title":552,"path":553,"stem":554,"children":555},"Miscellaneous (MSC)","\u002Fsei-cert-fortran-coding-standard\u002Fmiscellaneous-msc","9.sei-cert-fortran-coding-standard\u002F12.miscellaneous-msc\u002F1.index",[556,557,561,565],{"title":552,"path":553,"stem":554},{"title":558,"path":559,"stem":560},"MSC01-F. Avoid using legacy or obsolescent Fortran constructs","\u002Fsei-cert-fortran-coding-standard\u002Fmiscellaneous-msc\u002Fmsc01-f","9.sei-cert-fortran-coding-standard\u002F12.miscellaneous-msc\u002F2.msc01-f",{"title":562,"path":563,"stem":564},"MSC02-F. Beware of compiler-specific extensions","\u002Fsei-cert-fortran-coding-standard\u002Fmiscellaneous-msc\u002Fmsc02-f","9.sei-cert-fortran-coding-standard\u002F12.miscellaneous-msc\u002F3.msc02-f",{"title":566,"path":567,"stem":568},"MSC03-F. Do not depend on undefined behavior","\u002Fsei-cert-fortran-coding-standard\u002Fmiscellaneous-msc\u002Fmsc03-f","9.sei-cert-fortran-coding-standard\u002F12.miscellaneous-msc\u002F4.msc03-f",{"title":570,"path":571,"stem":572,"children":573},"Procedures (PRC)","\u002Fsei-cert-fortran-coding-standard\u002Fprocedures-prc","9.sei-cert-fortran-coding-standard\u002F13.procedures-prc\u002F1.index",[574,575,579,583],{"title":570,"path":571,"stem":572},{"title":576,"path":577,"stem":578},"PRC01-F. Disable the implicit declaration of procedures","\u002Fsei-cert-fortran-coding-standard\u002Fprocedures-prc\u002Fprc01-f","9.sei-cert-fortran-coding-standard\u002F13.procedures-prc\u002F2.prc01-f",{"title":580,"path":581,"stem":582},"PRC02-F. Avoid implicit interfaces by using module procedures","\u002Fsei-cert-fortran-coding-standard\u002Fprocedures-prc\u002Fprc02-f","9.sei-cert-fortran-coding-standard\u002F13.procedures-prc\u002F3.prc02-f",{"title":584,"path":585,"stem":586},"PRC03-F. Declare the intent for all dummy arguments","\u002Fsei-cert-fortran-coding-standard\u002Fprocedures-prc\u002Fprc03-f","9.sei-cert-fortran-coding-standard\u002F13.procedures-prc\u002F4.prc03-f",{"title":588,"path":589,"stem":590},"Program Units (PRU)","\u002Fsei-cert-fortran-coding-standard\u002Fprogram-units-pru","9.sei-cert-fortran-coding-standard\u002F14.program-units-pru",{"title":592,"path":593,"stem":594,"children":595},"Scope, Association, and Definition (SAD)","\u002Fsei-cert-fortran-coding-standard\u002Fscope-association-and-definition-sad","9.sei-cert-fortran-coding-standard\u002F15.scope-association-and-definition-sad\u002F1.index",[596,597,601,605],{"title":592,"path":593,"stem":594},{"title":598,"path":599,"stem":600},"SAD02-F. Minimize imported module entities using the ONLY clause","\u002Fsei-cert-fortran-coding-standard\u002Fscope-association-and-definition-sad\u002Fsad02-f","9.sei-cert-fortran-coding-standard\u002F15.scope-association-and-definition-sad\u002F2.sad02-f",{"title":602,"path":603,"stem":604},"SAD03-F. Replace common block with modules for safer data encapsulation","\u002Fsei-cert-fortran-coding-standard\u002Fscope-association-and-definition-sad\u002Fsad03-f","9.sei-cert-fortran-coding-standard\u002F15.scope-association-and-definition-sad\u002F3.sad03-f",{"title":606,"path":607,"stem":608},"Limit the scope of variables and procedures","\u002Fsei-cert-fortran-coding-standard\u002Fscope-association-and-definition-sad\u002Flimit-the-scope-of-variables-and-procedures","9.sei-cert-fortran-coding-standard\u002F15.scope-association-and-definition-sad\u002F4.limit-the-scope-of-variables-and-procedures",{"title":610,"path":611,"stem":612,"children":613},"Types (TYP)","\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ","9.sei-cert-fortran-coding-standard\u002F16.types-typ\u002F1.index",[614,615,618,622,626],{"title":610,"path":611,"stem":612},{"title":616,"path":386,"stem":617},"TYP01-F. Use Intrinsic Assignment for Character Entities","9.sei-cert-fortran-coding-standard\u002F16.types-typ\u002F2.typ01-f",{"title":619,"path":620,"stem":621},"TYP02-F. Prohibit implicit typing in all program units","\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp02-f","9.sei-cert-fortran-coding-standard\u002F16.types-typ\u002F3.typ02-f",{"title":623,"path":624,"stem":625},"TYP03-F. Ensure intrinsic function arguments match intended precision","\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp03-f","9.sei-cert-fortran-coding-standard\u002F16.types-typ\u002F4.typ03-f",{"title":627,"path":628,"stem":629},"TYP04-F. Centralize kind definitions to ensure consistent precision","\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp04-f","9.sei-cert-fortran-coding-standard\u002F16.types-typ\u002F5.typ04-f",{"title":631,"path":632,"stem":633},"Acknowledgments","\u002Fsei-cert-fortran-coding-standard\u002Facknowledgements","9.sei-cert-fortran-coding-standard\u002Facknowledgements",1780320167999]