Reset derived data portably with NVFORTRAN - #394
Open
krystophny wants to merge 1 commit into
Open
Conversation
There was a problem hiding this comment.
Review verdict: Approve
Summary: PR #394 replaces structure-constructor resets (data = jorek_restart_t() / data = spectre_data_t()) in two free_* routines with a local default-initialized variable (empty) of the same type, to work around an NVFORTRAN portability issue with deallocating allocatable components via structure-constructor assignment.
Findings:
- [minor]
src/field/jorek_restart.f90:105-107/src/spectre/spectre_reader.f90:71-73— The fix is correct and portable. A localtype :: emptyvariable receives default initialization (scalars to defaults, allocatables unallocated), sodata = emptytriggers Fortran-2003 automatic deallocation ofdata's allocatable components. This is functionally equivalent to the old structure constructor but avoids the NVFORTRAN bug wheredata = type_t()may fail to deallocate allocatable members. No behavioral change for gfortran; the existing tests (test_jorek_restart,test_spectre_reader) already assertallocated()is false afterfree_*, which directly validates the fix.
No other free_* routines or data = type_t() patterns exist in src/, so the fix is complete. Both types have only scalar and allocatable components (no pointers), so the local-variable approach is safe with no leak risk.
Verdict: Approve — minimal, well-targeted portability fix with adequate existing test coverage.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
default-initialized object;
The prior constructors omit allocatable components that do not have default
initializers. GFortran accepts that form, while NVFORTRAN rejects it with
NVFORTRAN-F-0155. The replacement is compiler-portable and was also verifiedwith a focused NVFORTRAN allocation/reset probe.
Verification
fo check: build 227 modules; all tests passed in 48.4 sfo fmt --checkon both changed files: passfo lint: zero unused imports; existing 472-warning baselinegit diff --check: pass