[flang-commits] [PATCH] D122439: [flang] Fix cycle-catcher in procedure characterization
Peter Klausler via Phabricator via flang-commits
flang-commits at lists.llvm.org
Thu Mar 24 15:50:43 PDT 2022
klausler created this revision.
klausler added a reviewer: jeanPerier.
klausler added a project: Flang.
Herald added a subscriber: jdoerfert.
Herald added a project: All.
klausler requested review of this revision.
The "seenProcs" sets passed as arguments to the procedure and dummy
procedure characterization routines need to be passed by value so that
local updates to those sets do not become permanent. They are
presently passed by reference and that has led to bogus errors about
recursively defined procedures in testing.
(It might be faster to pass the sets by reference and undo those local
updates in these functions, but that's error-prone, and the performance
difference is not expected to be detectable in practice.)
https://reviews.llvm.org/D122439
Files:
flang/lib/Evaluate/characteristics.cpp
Index: flang/lib/Evaluate/characteristics.cpp
===================================================================
--- flang/lib/Evaluate/characteristics.cpp
+++ flang/lib/Evaluate/characteristics.cpp
@@ -366,11 +366,11 @@
// 15.4.3.6, paragraph 2.
static std::optional<DummyArgument> CharacterizeDummyArgument(
const semantics::Symbol &symbol, FoldingContext &context,
- semantics::UnorderedSymbolSet &seenProcs);
+ semantics::UnorderedSymbolSet seenProcs);
static std::optional<Procedure> CharacterizeProcedure(
const semantics::Symbol &original, FoldingContext &context,
- semantics::UnorderedSymbolSet &seenProcs) {
+ semantics::UnorderedSymbolSet seenProcs) {
Procedure result;
const auto &symbol{ResolveAssociations(original)};
if (seenProcs.find(symbol) != seenProcs.end()) {
@@ -508,7 +508,7 @@
static std::optional<DummyProcedure> CharacterizeDummyProcedure(
const semantics::Symbol &symbol, FoldingContext &context,
- semantics::UnorderedSymbolSet &seenProcs) {
+ semantics::UnorderedSymbolSet seenProcs) {
if (auto procedure{CharacterizeProcedure(symbol, context, seenProcs)}) {
// Dummy procedures may not be elemental. Elemental dummy procedure
// interfaces are errors when the interface is not intrinsic, and that
@@ -562,7 +562,7 @@
static std::optional<DummyArgument> CharacterizeDummyArgument(
const semantics::Symbol &symbol, FoldingContext &context,
- semantics::UnorderedSymbolSet &seenProcs) {
+ semantics::UnorderedSymbolSet seenProcs) {
auto name{symbol.name().ToString()};
if (symbol.has<semantics::ObjectEntityDetails>() ||
symbol.has<semantics::EntityDetails>()) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D122439.418065.patch
Type: text/x-patch
Size: 1682 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20220324/e5c138a8/attachment-0001.bin>
More information about the flang-commits
mailing list