Author: Tim Keith Date: 2021-01-14T06:52:21-08:00 New Revision: 3e41ab18db2255028c288a11665c08d260654299
URL: https://github.com/llvm/llvm-project/commit/3e41ab18db2255028c288a11665c08d260654299 DIFF: https://github.com/llvm/llvm-project/commit/3e41ab18db2255028c288a11665c08d260654299.diff LOG: [flang] Fix dangling pointer in LabelEnforce `DirectiveStructureChecker` was passing in a pointer to a temporary string for the `construct` argument to the constructor for `LabelEnforce`. The `LabelEnforce` object had a lifetime longer than the temporary, resulting in accessing a dangling pointer when emitting an error message for `omp-parallell01.f90`. The fix is to make the lifetime of the temporary as long as the lifetime of the `LabelEnforce` object. Differential Revision: https://reviews.llvm.org/D94618 Added: Modified: flang/lib/Semantics/check-directive-structure.h Removed: ################################################################################ diff --git a/flang/lib/Semantics/check-directive-structure.h b/flang/lib/Semantics/check-directive-structure.h index 1075087feb4f..76157ac93925 100644 --- a/flang/lib/Semantics/check-directive-structure.h +++ b/flang/lib/Semantics/check-directive-structure.h @@ -280,9 +280,9 @@ void DirectiveStructureChecker<D, C, PC, ClauseEnumSize>::CheckNoBranching( context_, directiveSource, directive, ContextDirectiveAsFortran()}; parser::Walk(block, noBranchingEnforce); + auto construct{parser::ToUpperCaseLetters(getDirectiveName(directive).str())}; LabelEnforce directiveLabelEnforce{context_, noBranchingEnforce.labels(), - directiveSource, - parser::ToUpperCaseLetters(getDirectiveName(directive).str()).c_str()}; + directiveSource, construct.c_str()}; parser::Walk(block, directiveLabelEnforce); } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits