[{"data":1,"prerenderedAt":1062},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp01-f":31,"surround-\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp01-f":867,"sidebar-sei-cert-fortran-coding-standard":876},[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":861,"extension":862,"meta":863,"navigation":7,"path":810,"seo":864,"stem":865,"__hash__":866},"content\u002F9.sei-cert-fortran-coding-standard\u002F16.types-typ\u002F2.typ01-f.md","TYP01-F. Use Intrinsic Assignment for Character Entities",{"type":35,"value":36,"toc":850},"minimark",[37,41,50,53,58,83,250,254,282,372,375,393,467,471,474,552,557,665,669,679,686,692,706,710,789,792,814,818,846],[38,39,33],"h1",{"id":40},"typ01-f-use-intrinsic-assignment-for-character-entities",[42,43,44,45,49],"p",{},"Programmers should use intrinsic assignment ( ",[46,47,48],"code",{},"="," ) rather than explicit loops to copy character strings to ensure correct padding, truncation, and memory safety.",[42,51,52],{},"In Fortran, manual character-by-character copying via loops is error-prone. If the source string is longer than the destination, a manual loop using the source length as the bound will result in an out-of-bounds write (buffer overflow). If the source is shorter, a manual loop will leave the remainder of the destination undefined.",[54,55,57],"h2",{"id":56},"noncompliant-code-example","Noncompliant Code Example",[42,59,60,61,64,65,68,69,72,73,76,77,79,80,82],{},"In this noncompliant code example, if ",[46,62,63],{},"len(b)"," is greater than ",[46,66,67],{},"len(a)"," , the assignment ",[46,70,71],{},"  a(i:i) = b(i:i) "," will access memory outside the bounds of ",[46,74,75],{},"a"," . This is an out-of-memory-bounds array access. If ",[46,78,63],{}," is less than ",[46,81,67],{}," , the remaining characters in a are not cleared, potentially leaving sensitive data or garbage values.",[84,85,87],"code-block",{"quality":86},"bad",[88,89,94],"pre",{"className":90,"code":91,"language":92,"meta":93,"style":93},"language-java shiki shiki-themes github-light-high-contrast github-dark-high-contrast monokai","subroutine example(a, b)\n  implicit none\n  character(len=*), intent(out) :: a\n  character(len=*), intent(in)  :: b\n  integer                       :: i\n\n  do i = 1, len(b)\n    a(i:i) = b(i:i)\n  end do\nend subroutine example\n","java","",[46,95,96,112,118,146,167,178,184,208,235,244],{"__ignoreMap":93},[97,98,101,105,109],"span",{"class":99,"line":100},"line",1,[97,102,104],{"class":103},"sgGSh","subroutine ",[97,106,108],{"class":107},"sx5EZ","example",[97,110,111],{"class":103},"(a, b)\n",[97,113,115],{"class":99,"line":114},2,[97,116,117],{"class":103},"  implicit none\n",[97,119,121,124,127,131,134,137,140,143],{"class":99,"line":120},3,[97,122,123],{"class":107},"  character",[97,125,126],{"class":103},"(len",[97,128,130],{"class":129},"sDW38","=*",[97,132,133],{"class":103},"), ",[97,135,136],{"class":107},"intent",[97,138,139],{"class":103},"(out) ",[97,141,142],{"class":129},"::",[97,144,145],{"class":103}," a\n",[97,147,149,151,153,155,157,159,162,164],{"class":99,"line":148},4,[97,150,123],{"class":107},[97,152,126],{"class":103},[97,154,130],{"class":129},[97,156,133],{"class":103},[97,158,136],{"class":107},[97,160,161],{"class":103},"(in)  ",[97,163,142],{"class":129},[97,165,166],{"class":103}," b\n",[97,168,170,173,175],{"class":99,"line":169},5,[97,171,172],{"class":103},"  integer                       ",[97,174,142],{"class":129},[97,176,177],{"class":103}," i\n",[97,179,181],{"class":99,"line":180},6,[97,182,183],{"emptyLinePlaceholder":7},"\n",[97,185,187,190,193,195,199,202,205],{"class":99,"line":186},7,[97,188,189],{"class":129},"  do",[97,191,192],{"class":103}," i ",[97,194,48],{"class":129},[97,196,198],{"class":197},"sFRm2"," 1",[97,200,201],{"class":103},", ",[97,203,204],{"class":107},"len",[97,206,207],{"class":103},"(b)\n",[97,209,211,214,217,220,223,225,228,230,232],{"class":99,"line":210},8,[97,212,213],{"class":107},"    a",[97,215,216],{"class":103},"(i",[97,218,219],{"class":129},":",[97,221,222],{"class":103},"i) ",[97,224,48],{"class":129},[97,226,227],{"class":107}," b",[97,229,216],{"class":103},[97,231,219],{"class":129},[97,233,234],{"class":103},"i)\n",[97,236,238,241],{"class":99,"line":237},9,[97,239,240],{"class":103},"  end ",[97,242,243],{"class":129},"do\n",[97,245,247],{"class":99,"line":246},10,[97,248,249],{"class":103},"end subroutine example\n",[54,251,253],{"id":252},"compliant-solution","Compliant Solution",[42,255,256,257,259,260,263,264,266,267,269,270,272,273,275,276,278,279,281],{},"To correct this problem, use default assignment with character entities. Default assignment of character entities of different lengths will blank-fill or truncate the value as appropriate. In this compliant solution, it ",[46,258,75],{}," will have the value of ",[46,261,262],{},"b"," . The assignment will blank-fill (if ",[46,265,63],{}," \u003C ",[46,268,67],{}," ), or it will truncate the value of ",[46,271,262],{}," to fit into ",[46,274,75],{}," (if ",[46,277,63],{}," > ",[46,280,67],{}," ). If the lengths are important, protect the assignment with conditional code and handle the case where the lengths are problematic.",[84,283,285],{"quality":284},"good",[88,286,288],{"className":90,"code":287,"language":92,"meta":93,"style":93},"subroutine example(a, b)\n  implicit none\n  character(len=*), intent(out) :: a\n  character(len=*), intent(in)  :: b\n\n  ! Compliant: Handles truncation and padding automatically and safely.\n  a = b\nend subroutine example\n",[46,289,290,298,302,320,338,342,359,368],{"__ignoreMap":93},[97,291,292,294,296],{"class":99,"line":100},[97,293,104],{"class":103},[97,295,108],{"class":107},[97,297,111],{"class":103},[97,299,300],{"class":99,"line":114},[97,301,117],{"class":103},[97,303,304,306,308,310,312,314,316,318],{"class":99,"line":120},[97,305,123],{"class":107},[97,307,126],{"class":103},[97,309,130],{"class":129},[97,311,133],{"class":103},[97,313,136],{"class":107},[97,315,139],{"class":103},[97,317,142],{"class":129},[97,319,145],{"class":103},[97,321,322,324,326,328,330,332,334,336],{"class":99,"line":148},[97,323,123],{"class":107},[97,325,126],{"class":103},[97,327,130],{"class":129},[97,329,133],{"class":103},[97,331,136],{"class":107},[97,333,161],{"class":103},[97,335,142],{"class":129},[97,337,166],{"class":103},[97,339,340],{"class":99,"line":169},[97,341,183],{"emptyLinePlaceholder":7},[97,343,344,347,350,352,356],{"class":99,"line":180},[97,345,346],{"class":129},"  !",[97,348,349],{"class":103}," Compliant",[97,351,219],{"class":129},[97,353,355],{"class":354},"shSoG"," Handles",[97,357,358],{"class":103}," truncation and padding automatically and safely.\n",[97,360,361,364,366],{"class":99,"line":186},[97,362,363],{"class":103},"  a ",[97,365,48],{"class":129},[97,367,166],{"class":103},[97,369,370],{"class":99,"line":210},[97,371,249],{"class":103},[54,373,253],{"id":374},"compliant-solution-1",[42,376,377,378,380,381,383,384,386,387,389,390,392],{},"If the intent is for ",[46,379,75],{}," to become an exact copy of ",[46,382,262],{}," (preserving b's length exactly, rather than truncating or padding), ",[46,385,75],{}," should be declared as an allocatable, deferred-length character entity. Upon assignment, the processor automatically reallocates ",[46,388,75],{}," to have the same length as ",[46,391,262],{}," .",[84,394,395],{"quality":284},[88,396,398],{"className":90,"code":397,"language":92,"meta":93,"style":93},"subroutine example(a, b)\n  implicit none\n  character(len=:), allocatable, intent(out) :: a\n  character(len=*), intent(in)               :: b\n\n  a = b\nend subroutine example\n",[46,399,400,408,412,432,451,455,463],{"__ignoreMap":93},[97,401,402,404,406],{"class":99,"line":100},[97,403,104],{"class":103},[97,405,108],{"class":107},[97,407,111],{"class":103},[97,409,410],{"class":99,"line":114},[97,411,117],{"class":103},[97,413,414,416,418,421,424,426,428,430],{"class":99,"line":120},[97,415,123],{"class":107},[97,417,126],{"class":103},[97,419,420],{"class":129},"=:",[97,422,423],{"class":103},"), allocatable, ",[97,425,136],{"class":107},[97,427,139],{"class":103},[97,429,142],{"class":129},[97,431,145],{"class":103},[97,433,434,436,438,440,442,444,447,449],{"class":99,"line":148},[97,435,123],{"class":107},[97,437,126],{"class":103},[97,439,130],{"class":129},[97,441,133],{"class":103},[97,443,136],{"class":107},[97,445,446],{"class":103},"(in)               ",[97,448,142],{"class":129},[97,450,166],{"class":103},[97,452,453],{"class":99,"line":169},[97,454,183],{"emptyLinePlaceholder":7},[97,456,457,459,461],{"class":99,"line":180},[97,458,363],{"class":103},[97,460,48],{"class":129},[97,462,166],{"class":103},[97,464,465],{"class":99,"line":186},[97,466,249],{"class":103},[54,468,470],{"id":469},"risk-assessment","Risk Assessment",[42,472,473],{},"Manual character loops bypass the safety mechanisms built into the language. Writing past the end of a character buffer can corrupt adjacent memory, leading to incorrect calculations or arbitrary code execution. Reading uninitialized parts of a character buffer (when the source is shorter) can lead to information leakage.",[475,476,477,498],"table",{},[478,479,480],"thead",{},[481,482,483,486,488,490,492,494,496],"tr",{},[484,485],"th",{},[484,487],{},[484,489],{},[484,491],{},[484,493],{},[484,495],{},[484,497],{},[499,500,501,525],"tbody",{},[481,502,503,507,510,513,516,519,522],{},[504,505,506],"td",{},"Rule",[504,508,509],{},"Severity",[504,511,512],{},"Likelihood",[504,514,515],{},"Detectable",[504,517,518],{},"Repairable",[504,520,521],{},"Priority",[504,523,524],{},"Level",[481,526,527,530,533,536,539,541,547],{},[504,528,529],{},"TYP01-F",[504,531,532],{},"High",[504,534,535],{},"Likely",[504,537,538],{},"No",[504,540,538],{},[504,542,543],{},[544,545,546],"strong",{},"P18",[504,548,549],{},[544,550,551],{},"L1",[553,554,556],"h3",{"id":555},"automated-detection","Automated Detection",[475,558,561,574],{"className":559},[560],"wrapped",[562,563,564,568,570,572],"colgroup",{},[565,566],"col",{"style":567},"width: 25%",[565,569],{"style":567},[565,571],{"style":567},[565,573],{"style":567},[499,575,576,600],{},[481,577,580,585,590,595],{"className":578},[579],"header",[484,581,582],{},[42,583,584],{},"Tool",[484,586,587],{},[42,588,589],{},"Version",[484,591,592],{},[42,593,594],{},"Checker",[484,596,597],{},[42,598,599],{},"Description",[481,601,604,622,629,635],{"className":602},[603],"odd",[504,605,606],{},[607,608,611],"div",{"className":609},[610],"content-wrapper",[607,612,615],{"className":613},[614],"sectionMacro",[607,616,619],{"className":617},[618],"sectionMacroRow",[42,620,621],{},"Compass\u002FROSE",[504,623,624],{},[42,625,626],{},[627,628],"br",{},[504,630,631],{},[42,632,633],{},[627,634],{},[504,636,637],{},[607,638,640],{"className":639},[610],[607,641,643],{"className":642},[614],[607,644,646],{"className":645},[618],[42,647,648,649,652,653,656,657,660,661,664],{},"can detect violations of this rule. In particular, Rose ensures that any pointer returned by ",[46,650,651],{},"          malloc()         "," , ",[46,654,655],{},"          calloc()         "," , or ",[46,658,659],{},"          realloc()         "," is first checked for NULL before being used (otherwise it is ",[46,662,663],{},"          free()         "," -d). Rose does not handle cases where an allocation is assigned to an lvalue that is not a variable (such as a struct member or C++ function call returning a reference.)",[54,666,668],{"id":667},"related-guidelines","Related Guidelines",[42,670,671,674,675],{},[75,672,673],{"href":20},"CERT C++ Secure Coding Standard"," : ",[75,676,678],{"href":677},"\u002Fsei-cert-cpp-coding-standard\u002Fthe-void\u002Fvoid-exp34-cpp-ensure-a-null-pointer-is-not-dereferenced","EXP34-CPP. Ensure a null pointer is not dereferenced",[42,680,681,685],{},[75,682,684],{"href":683},"\u002Fconfluence\u002Fpages\u002Fcreatepage.action?spaceKey=fortran&title=AA.+Bibliography&linkCreation=true&fromPageId=88487238","ISO\u002FIEC 9899:1999"," Section 6.3.2.3, \"Pointers\"",[42,687,688,691],{},[75,689,690],{"href":683},"ISO\u002FIEC TR 24772"," \"HFC Pointer casting and pointer type changes\" and \"XYH Null Pointer Dereference\"",[42,693,694,674,700,705],{},[75,695,699],{"href":696,"rel":697},"http:\u002F\u002Fcwe.mitre.org\u002F",[698],"nofollow","MITRE CWE",[75,701,704],{"href":702,"rel":703},"http:\u002F\u002Fcwe.mitre.org\u002Fdata\u002Fdefinitions\u002F476.html",[698],"CWE-476"," , \"NULL Pointer Dereference\"",[54,707,709],{"id":708},"bibliography","Bibliography",[475,711,713],{"className":712},[560],[499,714,715,729,742,754,766,778],{},[481,716,718,726],{"className":717},[603],[504,719,720,721,725],{},"[ ",[75,722,724],{"href":723},"https:\u002F\u002Fj3-fortran.org\u002Fdoc\u002Fyear\u002F24\u002F24-007.pdf","Fortran 2023 Interpretation Document"," ]",[504,727,728],{},"Sections 10.2.1.3",[481,730,733,738],{"className":731},[732],"even",[504,734,720,735,725],{},[75,736,737],{"href":683},"Goodin 2009",[504,739,740],{},[627,741],{},[481,743,745,750],{"className":744},[603],[504,746,720,747,725],{},[75,748,749],{"href":683},"Jack 2007",[504,751,752],{},[627,753],{},[481,755,757,762],{"className":756},[732],[504,758,720,759,725],{},[75,760,761],{"href":683},"Liu 2009",[504,763,764],{},[627,765],{},[481,767,769,774],{"className":768},[603],[504,770,720,771,725],{},[75,772,773],{"href":683},"van Sprundel 2006",[504,775,776],{},[627,777],{},[481,779,781,786],{"className":780},[732],[504,782,720,783,725],{},[75,784,785],{"href":683},"Viega 2005",[504,787,788],{},"Section 5.2.18, \"Null-pointer dereference\"",[790,791],"hr",{},[42,793,794,801,802,801,808],{},[75,795,797],{"href":796},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002Fpre30-c",[798,799],"img",{"src":800},"attachments\u002F88487238\u002F638779487.png"," ",[75,803,805],{"href":804},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fpreprocessor-pre\u002F",[798,806],{"src":807},"attachments\u002F88487238\u002F638779488.png",[75,809,811],{"href":810},"\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ\u002Ftyp01-f",[798,812],{"src":813},"attachments\u002F88487238\u002F638779489.png",[54,815,817],{"id":816},"attachments","Attachments:",[607,819,823],{"className":820,"align":822},[821],"greybox","left",[42,824,825,801,828,831,832,834,801,836,831,839,841,801,843,831],{},[798,826],{"alt":93,"src":827},"images\u002Ficons\u002Fbullet_blue.gif",[75,829,830],{"href":800},"button_arrow_left.png"," (image\u002Fpng)",[627,833],{},[798,835],{"alt":93,"src":827},[75,837,838],{"href":807},"button_arrow_up.png",[627,840],{},[798,842],{"alt":93,"src":827},[75,844,845],{"href":813},"button_arrow_right.png",[847,848,849],"style",{},"html pre.shiki code .sgGSh, html code.shiki .sgGSh{--shiki-default:#0E1116;--shiki-dark:#F0F3F6;--shiki-sepia:#F8F8F2}html pre.shiki code .sx5EZ, html code.shiki .sx5EZ{--shiki-default:#622CBC;--shiki-dark:#DBB7FF;--shiki-sepia:#A6E22E}html pre.shiki code .sDW38, html code.shiki .sDW38{--shiki-default:#A0111F;--shiki-dark:#FF9492;--shiki-sepia:#F92672}html pre.shiki code .sFRm2, html code.shiki .sFRm2{--shiki-default:#023B95;--shiki-dark:#91CBFF;--shiki-sepia:#AE81FF}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);}html pre.shiki code .shSoG, html code.shiki .shSoG{--shiki-default:#0E1116;--shiki-default-font-style:inherit;--shiki-dark:#F0F3F6;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}",{"title":93,"searchDepth":114,"depth":114,"links":851},[852,853,854,855,858,859,860],{"id":56,"depth":114,"text":57},{"id":252,"depth":114,"text":253},{"id":374,"depth":114,"text":253},{"id":469,"depth":114,"text":470,"children":856},[857],{"id":555,"depth":120,"text":556},{"id":667,"depth":114,"text":668},{"id":708,"depth":114,"text":709},{"id":816,"depth":114,"text":817},"Programmers should use intrinsic assignment ( = ) rather than explicit loops to copy character strings to ensure correct padding, truncation, and memory safety.","md",{},{"title":33,"description":861},"9.sei-cert-fortran-coding-standard\u002F16.types-typ\u002F2.typ01-f","bPKrI3PGP0xGUGEsmDU81vNG04r8-s5-qgUZ4bM7TbA",[868,872],{"title":869,"path":870,"stem":871,"children":-1},"Types (TYP)","\u002Fsei-cert-fortran-coding-standard\u002Ftypes-typ","9.sei-cert-fortran-coding-standard\u002F16.types-typ\u002F1.index",{"title":873,"path":874,"stem":875,"children":-1},"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",[877],{"title":878,"path":879,"stem":880,"children":881},"Sei Cert Fortran Coding Standard","\u002Fsei-cert-fortran-coding-standard","9.sei-cert-fortran-coding-standard",[882,885,907,921,947,957,961,971,975,979,983,987,1005,1023,1027,1045,1058],{"title":883,"path":879,"stem":884},"SEI CERT Fortran Coding Standard","9.sei-cert-fortran-coding-standard\u002F1.index",{"title":886,"path":887,"stem":888,"children":889},"Arrays (ARR)","\u002Fsei-cert-fortran-coding-standard\u002Farrays-arr","9.sei-cert-fortran-coding-standard\u002F02.arrays-arr\u002F1.index",[890,891,895,899,903],{"title":886,"path":887,"stem":888},{"title":892,"path":893,"stem":894},"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":896,"path":897,"stem":898},"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":900,"path":901,"stem":902},"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":904,"path":905,"stem":906},"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":908,"path":909,"stem":910,"children":911},"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",[912,913,917],{"title":908,"path":909,"stem":910},{"title":914,"path":915,"stem":916},"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":918,"path":919,"stem":920},"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":922,"path":923,"stem":924,"children":925},"Concurrency (CON)","\u002Fsei-cert-fortran-coding-standard\u002Fconcurrency-con","9.sei-cert-fortran-coding-standard\u002F04.concurrency-con\u002F1.index",[926,927,931,935,939,943],{"title":922,"path":923,"stem":924},{"title":928,"path":929,"stem":930},"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":932,"path":933,"stem":934},"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":936,"path":937,"stem":938},"CON03-F. Protect multithreading recurrences to avoid data races","\u002Fsei-cert-fortran-coding-standard\u002Fconcurrency-con\u002Fcon03-f","9.sei-cert-fortran-coding-standard\u002F04.concurrency-con\u002F4.con03-f",{"title":940,"path":941,"stem":942},"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",{"title":944,"path":945,"stem":946},"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":948,"path":949,"stem":950,"children":951},"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",[952,953],{"title":948,"path":949,"stem":950},{"title":954,"path":955,"stem":956},"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":958,"path":959,"stem":960},"Execution Control (EXC)","\u002Fsei-cert-fortran-coding-standard\u002Fexecution-control-exc","9.sei-cert-fortran-coding-standard\u002F06.execution-control-exc",{"title":962,"path":963,"stem":964,"children":965},"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",[966,967],{"title":962,"path":963,"stem":964},{"title":968,"path":969,"stem":970},"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":972,"path":973,"stem":974},"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":976,"path":977,"stem":978},"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":980,"path":981,"stem":982},"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":984,"path":985,"stem":986},"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":988,"path":989,"stem":990,"children":991},"Miscellaneous (MSC)","\u002Fsei-cert-fortran-coding-standard\u002Fmiscellaneous-msc","9.sei-cert-fortran-coding-standard\u002F12.miscellaneous-msc\u002F1.index",[992,993,997,1001],{"title":988,"path":989,"stem":990},{"title":994,"path":995,"stem":996},"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":998,"path":999,"stem":1000},"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":1002,"path":1003,"stem":1004},"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":1006,"path":1007,"stem":1008,"children":1009},"Procedures (PRC)","\u002Fsei-cert-fortran-coding-standard\u002Fprocedures-prc","9.sei-cert-fortran-coding-standard\u002F13.procedures-prc\u002F1.index",[1010,1011,1015,1019],{"title":1006,"path":1007,"stem":1008},{"title":1012,"path":1013,"stem":1014},"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":1016,"path":1017,"stem":1018},"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":1020,"path":1021,"stem":1022},"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":1024,"path":1025,"stem":1026},"Program Units (PRU)","\u002Fsei-cert-fortran-coding-standard\u002Fprogram-units-pru","9.sei-cert-fortran-coding-standard\u002F14.program-units-pru",{"title":1028,"path":1029,"stem":1030,"children":1031},"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",[1032,1033,1037,1041],{"title":1028,"path":1029,"stem":1030},{"title":1034,"path":1035,"stem":1036},"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":1038,"path":1039,"stem":1040},"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":1042,"path":1043,"stem":1044},"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":869,"path":870,"stem":871,"children":1046},[1047,1048,1049,1050,1054],{"title":869,"path":870,"stem":871},{"title":33,"path":810,"stem":865},{"title":873,"path":874,"stem":875},{"title":1051,"path":1052,"stem":1053},"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":1055,"path":1056,"stem":1057},"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":1059,"path":1060,"stem":1061},"Acknowledgments","\u002Fsei-cert-fortran-coding-standard\u002Facknowledgements","9.sei-cert-fortran-coding-standard\u002Facknowledgements",1780320166963]