[{"data":1,"prerenderedAt":917},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl04-f":31,"surround-\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl04-f":700,"sidebar-sei-cert-fortran-coding-standard":709},[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":694,"meta":695,"navigation":7,"path":696,"seo":697,"stem":698,"__hash__":699},"content\u002F9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl04-f.md","DCL04-F. Conditionally initialized variables can lead to undefined behavior",{"type":35,"value":36,"toc":686},"minimark",[37,41,45,57,65,68,71,89,94,97,381,399,404,415,447,456,486,489,493,500,509,541,545,548,625,648,652,682],[38,39,33],"h1",{"id":40},"dcl04-f-conditionally-initialized-variables-can-lead-to-undefined-behavior",[42,43,44],"p",{},"A variable is initialized only under certain conditions. If there are control\nflow paths that read the variable when uninitialized, this can lead to\nundefined behavior due to its indeterminate value.",[42,46,47,48,52,53,56],{},"To prevent bugs in the code, ensure the problematic variable is initialized in\nall possible code paths. It may help to add explicit ",[49,50,51],"code",{},"else"," or ",[49,54,55],{},"default","\nbranches in control-flow blocks, or even set a default initial value\nimmediately after declaring the variable.",[42,58,59,60,64],{},"Some programming languages automatically initialize variables to default\nvalues, but Fortran, C, and C++ often do not. Consequently, variables left\nuninitialized contain unpredictable data until they are explicitly set by the\nprogrammer. In ",[61,62,63],"strong",{},"Fortran",", reading any variable that has not been explicitly initialized\nresults in undefined behavior.",[42,66,67],{},"Since uninitialized variables may contain any arbitrary values, reading and\nusing them can lead to undefined behavior, potentially causing incorrect\nresults, crashes, or other unintended outcomes. Compilers are not required to\nwarn about these issues and, even if they do, they typically still allow the\ncode to compile and run.",[42,69,70],{},"Some compilers may appear to \"help\" by zero-initializing variables under\ncertain conditions (e.g., specific compilation flags). While this can make\ntechnically incorrect code run as originally intended, relying on such\nincidental behavior creates a false sense of security and masks underlying\nlogical errors. Ultimately, this can vanish under different compilation\nsettings and can vary between compilers.",[42,72,73,74,77,78,52,81,84,85,88],{},"Lastly, while some compilers provide options to automatically initialize\ncertain data types (e.g., ",[49,75,76],{},"gfortran","'s ",[49,79,80],{},"-finit-integer=\u003Cvalue>",[49,82,83],{},"gcc","'s\n",[49,86,87],{},"-ftrivial-auto-var-init=\u003Cvalue>","), these features reduce portability to other\ndevelopment environments and hide problems in the code rather than addressing\nthem.",[90,91,93],"h2",{"id":92},"noncompliant-code-example","Noncompliant Code Example",[42,95,96],{},"Consider the following code, which sums the elements of an array after applying\nthe specified transformation:",[98,99,101],"code-block",{"quality":100},"bad",[102,103,108],"pre",{"className":104,"code":105,"language":106,"meta":107,"style":107},"language-fortran shiki shiki-themes github-light-high-contrast github-dark-high-contrast monokai","! example.f90\n\nmodule options\n  implicit none\n  integer, parameter :: OPTION_HALF   = 1\n  integer, parameter :: OPTION_DOUBLE = 2\n  integer, parameter :: OPTION_UNKNOWN = 3\nend module options\n\nprogram main\n  use iso_fortran_env, only: real32\n  use options, only: OPTION_HALF, OPTION_DOUBLE, OPTION_UNKNOWN\n  implicit none\n\n  real(kind=real32) :: array(4)\n  array = [0.25, 0.25, 0.25, 0.25]\n\n  print *, \"Sum is:\", transform_and_sum(array, OPTION_UNKNOWN)\n\ncontains\n\n  pure real(kind=real32) function transform_and_sum(array, option)\n    implicit none\n\n    real(kind=real32), intent(in) :: array(:)\n    integer, intent(in) :: option\n\n    real(kind=real32) :: sum\n    real(kind=real32) :: factor\n    integer :: i\n\n    sum = 0.0\n\n    if (option == OPTION_HALF) then\n      factor = 0.5\n    else if (option == OPTION_DOUBLE) then\n      factor = 2.0\n    end if\n\n    do i = 1, size(array, 1)\n      sum = sum + array(i) * factor\n    end do\n\n    transform_and_sum = sum\n  end function transform_and_sum\n\nend program main\n","fortran","",[49,109,110,118,124,130,136,142,148,154,160,165,171,177,183,188,193,199,205,210,216,221,227,232,238,244,249,255,261,266,272,278,284,289,295,300,306,312,318,324,330,335,341,347,353,358,364,370,375],{"__ignoreMap":107},[111,112,115],"span",{"class":113,"line":114},"line",1,[111,116,117],{},"! example.f90\n",[111,119,121],{"class":113,"line":120},2,[111,122,123],{"emptyLinePlaceholder":7},"\n",[111,125,127],{"class":113,"line":126},3,[111,128,129],{},"module options\n",[111,131,133],{"class":113,"line":132},4,[111,134,135],{},"  implicit none\n",[111,137,139],{"class":113,"line":138},5,[111,140,141],{},"  integer, parameter :: OPTION_HALF   = 1\n",[111,143,145],{"class":113,"line":144},6,[111,146,147],{},"  integer, parameter :: OPTION_DOUBLE = 2\n",[111,149,151],{"class":113,"line":150},7,[111,152,153],{},"  integer, parameter :: OPTION_UNKNOWN = 3\n",[111,155,157],{"class":113,"line":156},8,[111,158,159],{},"end module options\n",[111,161,163],{"class":113,"line":162},9,[111,164,123],{"emptyLinePlaceholder":7},[111,166,168],{"class":113,"line":167},10,[111,169,170],{},"program main\n",[111,172,174],{"class":113,"line":173},11,[111,175,176],{},"  use iso_fortran_env, only: real32\n",[111,178,180],{"class":113,"line":179},12,[111,181,182],{},"  use options, only: OPTION_HALF, OPTION_DOUBLE, OPTION_UNKNOWN\n",[111,184,186],{"class":113,"line":185},13,[111,187,135],{},[111,189,191],{"class":113,"line":190},14,[111,192,123],{"emptyLinePlaceholder":7},[111,194,196],{"class":113,"line":195},15,[111,197,198],{},"  real(kind=real32) :: array(4)\n",[111,200,202],{"class":113,"line":201},16,[111,203,204],{},"  array = [0.25, 0.25, 0.25, 0.25]\n",[111,206,208],{"class":113,"line":207},17,[111,209,123],{"emptyLinePlaceholder":7},[111,211,213],{"class":113,"line":212},18,[111,214,215],{},"  print *, \"Sum is:\", transform_and_sum(array, OPTION_UNKNOWN)\n",[111,217,219],{"class":113,"line":218},19,[111,220,123],{"emptyLinePlaceholder":7},[111,222,224],{"class":113,"line":223},20,[111,225,226],{},"contains\n",[111,228,230],{"class":113,"line":229},21,[111,231,123],{"emptyLinePlaceholder":7},[111,233,235],{"class":113,"line":234},22,[111,236,237],{},"  pure real(kind=real32) function transform_and_sum(array, option)\n",[111,239,241],{"class":113,"line":240},23,[111,242,243],{},"    implicit none\n",[111,245,247],{"class":113,"line":246},24,[111,248,123],{"emptyLinePlaceholder":7},[111,250,252],{"class":113,"line":251},25,[111,253,254],{},"    real(kind=real32), intent(in) :: array(:)\n",[111,256,258],{"class":113,"line":257},26,[111,259,260],{},"    integer, intent(in) :: option\n",[111,262,264],{"class":113,"line":263},27,[111,265,123],{"emptyLinePlaceholder":7},[111,267,269],{"class":113,"line":268},28,[111,270,271],{},"    real(kind=real32) :: sum\n",[111,273,275],{"class":113,"line":274},29,[111,276,277],{},"    real(kind=real32) :: factor\n",[111,279,281],{"class":113,"line":280},30,[111,282,283],{},"    integer :: i\n",[111,285,287],{"class":113,"line":286},31,[111,288,123],{"emptyLinePlaceholder":7},[111,290,292],{"class":113,"line":291},32,[111,293,294],{},"    sum = 0.0\n",[111,296,298],{"class":113,"line":297},33,[111,299,123],{"emptyLinePlaceholder":7},[111,301,303],{"class":113,"line":302},34,[111,304,305],{},"    if (option == OPTION_HALF) then\n",[111,307,309],{"class":113,"line":308},35,[111,310,311],{},"      factor = 0.5\n",[111,313,315],{"class":113,"line":314},36,[111,316,317],{},"    else if (option == OPTION_DOUBLE) then\n",[111,319,321],{"class":113,"line":320},37,[111,322,323],{},"      factor = 2.0\n",[111,325,327],{"class":113,"line":326},38,[111,328,329],{},"    end if\n",[111,331,333],{"class":113,"line":332},39,[111,334,123],{"emptyLinePlaceholder":7},[111,336,338],{"class":113,"line":337},40,[111,339,340],{},"    do i = 1, size(array, 1)\n",[111,342,344],{"class":113,"line":343},41,[111,345,346],{},"      sum = sum + array(i) * factor\n",[111,348,350],{"class":113,"line":349},42,[111,351,352],{},"    end do\n",[111,354,356],{"class":113,"line":355},43,[111,357,123],{"emptyLinePlaceholder":7},[111,359,361],{"class":113,"line":360},44,[111,362,363],{},"    transform_and_sum = sum\n",[111,365,367],{"class":113,"line":366},45,[111,368,369],{},"  end function transform_and_sum\n",[111,371,373],{"class":113,"line":372},46,[111,374,123],{"emptyLinePlaceholder":7},[111,376,378],{"class":113,"line":377},47,[111,379,380],{},"end program main\n",[42,382,383,384,387,388,391,392,394,395,398],{},"Note how ",[49,385,386],{},"factor"," is only explicitly initialized when the received ",[49,389,390],{},"option"," is\nknown. Since the Fortran standard does not guarantee any specific initial\nvalue, the state of ",[49,393,386],{}," is indeterminate in the previous scenario (using\n",[49,396,397],{},"OPTION_UNKNOWN","), leading to different outcomes depending on the compiler settings.",[400,401,403],"h3",{"id":402},"implementation-details-unix","Implementation Details (Unix)",[42,405,406,407,410,411,414],{},"Consider the following compiler settings that produce different results. For instance, ",[49,408,409],{},"gfortran -O2"," behaves as if the ",[49,412,413],{},"if"," branch was taken:",[102,416,420],{"className":417,"code":418,"language":419,"meta":107,"style":107},"language-txt shiki shiki-themes github-light-high-contrast github-dark-high-contrast monokai","$ gfortran --version\nGNU Fortran (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0\n$ gfortran -O2 example.f90 -o example_gfortran\n$ .\u002Fexample_gfortran \n Sum is:   0.500000\n","txt",[49,421,422,427,432,437,442],{"__ignoreMap":107},[111,423,424],{"class":113,"line":114},[111,425,426],{},"$ gfortran --version\n",[111,428,429],{"class":113,"line":120},[111,430,431],{},"GNU Fortran (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0\n",[111,433,434],{"class":113,"line":126},[111,435,436],{},"$ gfortran -O2 example.f90 -o example_gfortran\n",[111,438,439],{"class":113,"line":132},[111,440,441],{},"$ .\u002Fexample_gfortran \n",[111,443,444],{"class":113,"line":138},[111,445,446],{}," Sum is:   0.500000\n",[42,448,449,450,410,453,414],{},"However, ",[49,451,452],{},"flang -O2",[49,454,455],{},"else if",[102,457,459],{"className":417,"code":458,"language":419,"meta":107,"style":107},"$ flang-new --version\nUbuntu flang-new version 18.1.3 (1ubuntu1)\n$ flang-new -O2 example.f90 -o example_flang\n$ .\u002Fexample_flang \n Sum is: 2.\n",[49,460,461,466,471,476,481],{"__ignoreMap":107},[111,462,463],{"class":113,"line":114},[111,464,465],{},"$ flang-new --version\n",[111,467,468],{"class":113,"line":120},[111,469,470],{},"Ubuntu flang-new version 18.1.3 (1ubuntu1)\n",[111,472,473],{"class":113,"line":126},[111,474,475],{},"$ flang-new -O2 example.f90 -o example_flang\n",[111,477,478],{"class":113,"line":132},[111,479,480],{},"$ .\u002Fexample_flang \n",[111,482,483],{"class":113,"line":138},[111,484,485],{}," Sum is: 2.\n",[42,487,488],{},"It is important to note that the compiler is not \"randomly choosing\" a branch\nto execute. Instead, an undefined behavior means the outcome of the code is\nunpredictable, and could even lead to completely incorrect results or crashes.\nIn other words, code with undefined behavior should never be relied upon.",[90,490,492],{"id":491},"compliant-solution","Compliant Solution",[42,494,495,496,499],{},"To prevent these problems, we must always initialize variables before using\nthem. This principle applies to all variable types, including other elemental\ntypes like ",[49,497,498],{},"integer",", derived types, and arrays.",[42,501,502,503,505,506,508],{},"There are multiple ways to solve the bug. For example, we can simply initialize\n",[49,504,386],{}," with a default value after its declaration, ensuring it is always\ndefined regardless of the received ",[49,507,390],{},":",[98,510,512],{"quality":511},"good",[102,513,515],{"className":104,"code":514,"language":106,"meta":107,"style":107},"! solution.f90\nreal(kind=real32) :: factor\n\n! Identity transformation by default\nfactor = 1.0\n",[49,516,517,522,527,531,536],{"__ignoreMap":107},[111,518,519],{"class":113,"line":114},[111,520,521],{},"! solution.f90\n",[111,523,524],{"class":113,"line":120},[111,525,526],{},"real(kind=real32) :: factor\n",[111,528,529],{"class":113,"line":126},[111,530,123],{"emptyLinePlaceholder":7},[111,532,533],{"class":113,"line":132},[111,534,535],{},"! Identity transformation by default\n",[111,537,538],{"class":113,"line":138},[111,539,540],{},"factor = 1.0\n",[90,542,544],{"id":543},"risk-assessment","Risk Assessment",[42,546,547],{},"Undefined behavior can produce incorrect results, silent data corruption, crashes, or nondeterministic behavior that varies across compilers or platforms. Programmers should ensure that the code avoids undefined behavior in all cases.",[549,550,551,572],"table",{},[552,553,554],"thead",{},[555,556,557,560,562,564,566,568,570],"tr",{},[558,559],"th",{},[558,561],{},[558,563],{},[558,565],{},[558,567],{},[558,569],{},[558,571],{},[573,574,575,599],"tbody",{},[555,576,577,581,584,587,590,593,596],{},[578,579,580],"td",{},"Recommendation",[578,582,583],{},"Severity",[578,585,586],{},"Likelihood",[578,588,589],{},"Detectable",[578,591,592],{},"Repairable",[578,594,595],{},"Priority",[578,597,598],{},"Level",[555,600,601,604,607,610,613,615,620],{},[578,602,603],{},"DCL04-F",[578,605,606],{},"High",[578,608,609],{},"Likely",[578,611,612],{},"Yes",[578,614,612],{},[578,616,617],{},[61,618,619],{},"P27",[578,621,622],{},[61,623,624],{},"L1",[42,626,627,635,636,635,642],{},[628,629,631],"a",{"href":630},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002Fpre30-c",[632,633],"img",{"src":634},"attachments\u002F629047330\u002F638779511.png"," ",[628,637,639],{"href":638},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002F",[632,640],{"src":641},"attachments\u002F629047330\u002F638779512.png",[628,643,645],{"href":644},"\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp01-f",[632,646],{"src":647},"attachments\u002F629047330\u002F638779513.png",[90,649,651],{"id":650},"attachments","Attachments:",[653,654,658],"div",{"className":655,"align":657},[656],"greybox","left",[42,659,660,635,663,666,667,670,635,672,666,675,677,635,679,666],{},[632,661],{"alt":107,"src":662},"images\u002Ficons\u002Fbullet_blue.gif",[628,664,665],{"href":634},"button_arrow_left.png"," (image\u002Fpng)",[668,669],"br",{},[632,671],{"alt":107,"src":662},[628,673,674],{"href":641},"button_arrow_up.png",[668,676],{},[632,678],{"alt":107,"src":662},[628,680,681],{"href":647},"button_arrow_right.png",[683,684,685],"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":107,"searchDepth":120,"depth":120,"links":687},[688,691,692,693],{"id":92,"depth":120,"text":93,"children":689},[690],{"id":402,"depth":126,"text":403},{"id":491,"depth":120,"text":492},{"id":543,"depth":120,"text":544},{"id":650,"depth":120,"text":651},"md",{},"\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl04-f",{"title":33,"description":44},"9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl04-f","uiNS0WV7nJ1Z5ITgIPvlPRJbYQiS3IZspeLK4MJHyg4",[701,705],{"title":702,"path":703,"stem":704,"children":-1},"DCL03-F. Avoid undefined behavior due to uninitialized variables","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl03-f",{"title":706,"path":707,"stem":708,"children":-1},"DCL05-F. Uninitialized output arguments can lead to undefined behavior","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl05-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl05-f",[710],{"title":711,"path":712,"stem":713,"children":714},"SEI CERT Fortran Coding Standard","\u002Fsei-cert-fortran-coding-standard","9.sei-cert-fortran-coding-standard\u002F01.index",[715,716,728,895,913],{"title":711,"path":712,"stem":713},{"title":717,"path":718,"stem":719,"children":720},"Front Matter","\u002Fsei-cert-fortran-coding-standard\u002Ffront-matter","9.sei-cert-fortran-coding-standard\u002F02.front-matter\u002F1.index",[721,722],{"title":717,"path":718,"stem":719},{"title":723,"path":724,"stem":725,"children":726},"Introduction","\u002Fsei-cert-fortran-coding-standard\u002Ffront-matter\u002Fintroduction","9.sei-cert-fortran-coding-standard\u002F02.front-matter\u002F2.introduction\u002F01.index",[727],{"title":723,"path":724,"stem":725},{"title":729,"path":730,"stem":731,"children":732},"Guidelines","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F01.index",[733,734,756,773,799,809,819,837,855,873],{"title":729,"path":730,"stem":731},{"title":735,"path":736,"stem":737,"children":738},"Arrays (ARR)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F1.index",[739,740,744,748,752],{"title":735,"path":736,"stem":737},{"title":741,"path":742,"stem":743},"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":745,"path":746,"stem":747},"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":749,"path":750,"stem":751},"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":753,"path":754,"stem":755},"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":757,"path":758,"stem":759,"children":760},"Declarations and Initialization (DCL)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F1.index",[761,762,766,770,771,772],{"title":757,"path":758,"stem":759},{"title":763,"path":764,"stem":765},"DCL01-F. Explicitly declare pure procedures","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl01-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl01-f",{"title":767,"path":768,"stem":769},"DCL02-F. Explicitly declare the 'save' attribute or split the variable initialization to prevent unintended behavior","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl02-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl02-f",{"title":702,"path":703,"stem":704},{"title":33,"path":696,"stem":698},{"title":706,"path":707,"stem":708},{"title":774,"path":775,"stem":776,"children":777},"Concurrency (CON)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F1.index",[778,779,783,787,791,795],{"title":774,"path":775,"stem":776},{"title":780,"path":781,"stem":782},"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":784,"path":785,"stem":786},"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":788,"path":789,"stem":790},"CON03-F. Protect multithreading recurrences to avoid data races","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con\u002Fcon03-f","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F4.con03-f",{"title":792,"path":793,"stem":794},"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",{"title":796,"path":797,"stem":798},"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":800,"path":801,"stem":802,"children":803},"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",[804,805],{"title":800,"path":801,"stem":802},{"title":806,"path":807,"stem":808},"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":810,"path":811,"stem":812,"children":813},"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",[814,815],{"title":810,"path":811,"stem":812},{"title":816,"path":817,"stem":818},"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":820,"path":821,"stem":822,"children":823},"Miscellaneous (MSC)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F1.index",[824,825,829,833],{"title":820,"path":821,"stem":822},{"title":826,"path":827,"stem":828},"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":830,"path":831,"stem":832},"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":834,"path":835,"stem":836},"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":838,"path":839,"stem":840,"children":841},"Procedures (PRC)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F1.index",[842,843,847,851],{"title":838,"path":839,"stem":840},{"title":844,"path":845,"stem":846},"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":848,"path":849,"stem":850},"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":852,"path":853,"stem":854},"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":856,"path":857,"stem":858,"children":859},"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",[860,861,865,869],{"title":856,"path":857,"stem":858},{"title":862,"path":863,"stem":864},"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":866,"path":867,"stem":868},"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":870,"path":871,"stem":872},"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":874,"path":875,"stem":876,"children":877},"Types (TYP)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F1.index",[878,879,883,887,891],{"title":874,"path":875,"stem":876},{"title":880,"path":881,"stem":882},"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":884,"path":885,"stem":886},"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":888,"path":889,"stem":890},"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":892,"path":893,"stem":894},"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":896,"path":897,"stem":898,"children":899},"Back Matter","\u002Fsei-cert-fortran-coding-standard\u002Fback-matter","9.sei-cert-fortran-coding-standard\u002F05.back-matter\u002F1.index",[900,901,905,909],{"title":896,"path":897,"stem":898},{"title":902,"path":903,"stem":904},"AA. Bibliography","\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Faa-bibliography","9.sei-cert-fortran-coding-standard\u002F05.back-matter\u002F2.aa-bibliography",{"title":906,"path":907,"stem":908},"BB. Definitions","\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Fbb-definitions","9.sei-cert-fortran-coding-standard\u002F05.back-matter\u002F3.bb-definitions",{"title":910,"path":911,"stem":912},"CC. Undefined Behavior","\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Fcc-undefined-behavior","9.sei-cert-fortran-coding-standard\u002F05.back-matter\u002F4.cc-undefined-behavior",{"title":914,"path":915,"stem":916},"Acknowledgments","\u002Fsei-cert-fortran-coding-standard\u002Facknowledgements","9.sei-cert-fortran-coding-standard\u002Facknowledgements",1785439591517]