[{"data":1,"prerenderedAt":382},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Fcc-undefined-behavior":31,"surround-\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Fcc-undefined-behavior":169,"sidebar-sei-cert-fortran-coding-standard":178},[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":159,"extension":160,"meta":161,"navigation":7,"path":165,"seo":166,"stem":167,"__hash__":168},"content\u002F9.sei-cert-fortran-coding-standard\u002F05.back-matter\u002F4.cc-undefined-behavior.md","CC. Undefined Behavior",{"type":35,"value":36,"toc":155},"minimark",[37,41,61,64],[38,39,33],"h1",{"id":40},"cc-undefined-behavior",[42,43,44,45,50,51,55,56,60],"p",{},"According to the [ ",[46,47,49],"a",{"href":48},"\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Fortran2018","Fortran 2018"," ] and [ ",[46,52,54],{"href":53},"\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Fortran2023","Fortran 2023"," ] language standards, the behavior of a program is ",[46,57,59],{"href":58},"\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-undefinedbehavior","undefined"," when it violates a normative requirement of the language or executes a construct for which the standard specifies that a value, association status, pointer, object, or effect is undefined. Unlike the C Standard, the Fortran standard does not provide a dedicated annex enumerating undefined behaviors. Instead, such cases are specified throughout the document by means of normative requirements (typically expressed using shall) and statements indicating that a value, variable, pointer, association status, allocation status, or other entity is undefined; that the effect is undefined; or that a program is not standard-conforming.",[42,62,63],{},"The \"Guideline\" column in the following table identifies the coding practices that address each instance of undefined behavior (UB). The \"Description\" column provides a short description of the undefined behavior, optionally indicating a quoted or closely paraphrased from the Fortran 2018 and Fortran 2023 standards.",[65,66,67,83],"table",{},[68,69,70],"thead",{},[71,72,73,77,80],"tr",{},[74,75,76],"th",{},"UB",[74,78,79],{},"Description",[74,81,82],{},"Guideline",[84,85,86,104,121,138],"tbody",{},[71,87,88,95,98],{},[89,90,91,92],"td",{},"1-F ",[46,93],{"id":94},"CC.UndefinedBehavior-ub_1",[89,96,97],{},"Avoid undefined behavior due to uninitialized variables.",[89,99,100],{},[46,101,103],{"href":102},"\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl03-f","DCL03-F",[71,105,106,112,115],{},[89,107,108,109],{},"2-F ",[46,110],{"id":111},"CC.UndefinedBehavior-ub_2",[89,113,114],{},"Conditionally initialized variables can lead to undefined behavior.",[89,116,117],{},[46,118,120],{"href":119},"\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl04-f","DCL04-F",[71,122,123,129,132],{},[89,124,125,126],{},"3-F ",[46,127],{"id":128},"CC.UndefinedBehavior-ub_3",[89,130,131],{},"Uninitialized output arguments can lead to undefined behavior.",[89,133,134],{},[46,135,137],{"href":136},"\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl05-f","DCL05-F",[71,139,140,146,149],{},[89,141,142,143],{},"4-F ",[46,144],{"id":145},"CC.UndefinedBehavior-ub_4",[89,147,148],{},"Explicitly declare the 'save' attribute or split the variable initialization to prevent unintended behavior.",[89,150,151],{},[46,152,154],{"href":153},"\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fdeclarations-and-initialization-dcl\u002Fdcl02-f","DCL02-F",{"title":156,"searchDepth":157,"depth":157,"links":158},"",2,[],"According to the [ Fortran 2018 ] and [ Fortran 2023 ] language standards, the behavior of a program is undefined when it violates a normative requirement of the language or executes a construct for which the standard specifies that a value, association status, pointer, object, or effect is undefined. Unlike the C Standard, the Fortran standard does not provide a dedicated annex enumerating undefined behaviors. Instead, such cases are specified throughout the document by means of normative requirements (typically expressed using shall) and statements indicating that a value, variable, pointer, association status, allocation status, or other entity is undefined; that the effect is undefined; or that a program is not standard-conforming.","md",{"tags":162},[163,164],"bm","section","\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Fcc-undefined-behavior",{"title":33,"description":159},"9.sei-cert-fortran-coding-standard\u002F05.back-matter\u002F4.cc-undefined-behavior","PInTG47QNLNuLTsIvtc_Ci1FXcBWfBb-B-c123P_iqw",[170,174],{"title":171,"path":172,"stem":173,"children":-1},"BB. Definitions","\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Fbb-definitions","9.sei-cert-fortran-coding-standard\u002F05.back-matter\u002F3.bb-definitions",{"title":175,"path":176,"stem":177,"children":-1},"Acknowledgments","\u002Fsei-cert-fortran-coding-standard\u002Facknowledgements","9.sei-cert-fortran-coding-standard\u002Facknowledgements",[179],{"title":180,"path":181,"stem":182,"children":183},"SEI CERT Fortran Coding Standard","\u002Fsei-cert-fortran-coding-standard","9.sei-cert-fortran-coding-standard\u002F01.index",[184,185,197,369,381],{"title":180,"path":181,"stem":182},{"title":186,"path":187,"stem":188,"children":189},"Front Matter","\u002Fsei-cert-fortran-coding-standard\u002Ffront-matter","9.sei-cert-fortran-coding-standard\u002F02.front-matter\u002F1.index",[190,191],{"title":186,"path":187,"stem":188},{"title":192,"path":193,"stem":194,"children":195},"Introduction","\u002Fsei-cert-fortran-coding-standard\u002Ffront-matter\u002Fintroduction","9.sei-cert-fortran-coding-standard\u002F02.front-matter\u002F2.introduction\u002F01.index",[196],{"title":192,"path":193,"stem":194},{"title":198,"path":199,"stem":200,"children":201},"Guidelines","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F01.index",[202,203,225,247,273,283,293,311,329,347],{"title":198,"path":199,"stem":200},{"title":204,"path":205,"stem":206,"children":207},"Arrays (ARR)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Farrays-arr","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F02.arrays-arr\u002F1.index",[208,209,213,217,221],{"title":204,"path":205,"stem":206},{"title":210,"path":211,"stem":212},"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":214,"path":215,"stem":216},"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":218,"path":219,"stem":220},"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":222,"path":223,"stem":224},"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":226,"path":227,"stem":228,"children":229},"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",[230,231,235,238,241,244],{"title":226,"path":227,"stem":228},{"title":232,"path":233,"stem":234},"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":236,"path":153,"stem":237},"DCL02-F. Explicitly declare the 'save' attribute or split the variable initialization to prevent unintended behavior","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl02-f",{"title":239,"path":102,"stem":240},"DCL03-F. Avoid undefined behavior due to uninitialized variables","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl03-f",{"title":242,"path":119,"stem":243},"DCL04-F. Conditionally initialized variables can lead to undefined behavior","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl04-f",{"title":245,"path":136,"stem":246},"DCL05-F. Uninitialized output arguments can lead to undefined behavior","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F03.declarations-and-initialization-dcl\u002F2.dcl05-f",{"title":248,"path":249,"stem":250,"children":251},"Concurrency (CON)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fconcurrency-con","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F04.concurrency-con\u002F1.index",[252,253,257,261,265,269],{"title":248,"path":249,"stem":250},{"title":254,"path":255,"stem":256},"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":258,"path":259,"stem":260},"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":262,"path":263,"stem":264},"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":266,"path":267,"stem":268},"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":270,"path":271,"stem":272},"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":274,"path":275,"stem":276,"children":277},"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",[278,279],{"title":274,"path":275,"stem":276},{"title":280,"path":281,"stem":282},"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":284,"path":285,"stem":286,"children":287},"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",[288,289],{"title":284,"path":285,"stem":286},{"title":290,"path":291,"stem":292},"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":294,"path":295,"stem":296,"children":297},"Miscellaneous (MSC)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fmiscellaneous-msc","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F12.miscellaneous-msc\u002F1.index",[298,299,303,307],{"title":294,"path":295,"stem":296},{"title":300,"path":301,"stem":302},"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":304,"path":305,"stem":306},"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":308,"path":309,"stem":310},"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":312,"path":313,"stem":314,"children":315},"Procedures (PRC)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Fprocedures-prc","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F13.procedures-prc\u002F1.index",[316,317,321,325],{"title":312,"path":313,"stem":314},{"title":318,"path":319,"stem":320},"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":322,"path":323,"stem":324},"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":326,"path":327,"stem":328},"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":330,"path":331,"stem":332,"children":333},"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",[334,335,339,343],{"title":330,"path":331,"stem":332},{"title":336,"path":337,"stem":338},"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":340,"path":341,"stem":342},"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":344,"path":345,"stem":346},"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":348,"path":349,"stem":350,"children":351},"Types (TYP)","\u002Fsei-cert-fortran-coding-standard\u002Fguidelines\u002Ftypes-typ","9.sei-cert-fortran-coding-standard\u002F04.guidelines\u002F16.types-typ\u002F1.index",[352,353,357,361,365],{"title":348,"path":349,"stem":350},{"title":354,"path":355,"stem":356},"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":358,"path":359,"stem":360},"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":362,"path":363,"stem":364},"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":366,"path":367,"stem":368},"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":370,"path":371,"stem":372,"children":373},"Back Matter","\u002Fsei-cert-fortran-coding-standard\u002Fback-matter","9.sei-cert-fortran-coding-standard\u002F05.back-matter\u002F1.index",[374,375,379,380],{"title":370,"path":371,"stem":372},{"title":376,"path":377,"stem":378},"AA. Bibliography","\u002Fsei-cert-fortran-coding-standard\u002Fback-matter\u002Faa-bibliography","9.sei-cert-fortran-coding-standard\u002F05.back-matter\u002F2.aa-bibliography",{"title":171,"path":172,"stem":173},{"title":33,"path":165,"stem":167},{"title":175,"path":176,"stem":177},1785439560771]