@@ -49,7 +49,7 @@ Each promised item should end the audit in one of three states: |
| 49 | 49 | |
| 50 | 50 | Kickoff items: |
| 51 | 51 | - source-level audit for helper-before-program entry lowering / dead-function root handling |
| 52 | | -- living XFAIL for module procedure host-association over module globals |
| 52 | +- source-level audit for module procedure host-association over module globals |
| 53 | 53 | - real-world stdlib-style kernel: |
| 54 | 54 | - tridiagonal sparse matvec (`realworld_tridiag_spmv.f90`) |
| 55 | 55 | - real-world BLAS-style kernel: |
@@ -114,6 +114,23 @@ Current audit findings: |
| 114 | 114 | real-world default-kind array-query assignments could produce invalid asm like |
| 115 | 115 | `mov w21, x20`; the new runtime-shape audit keeps that truncation surface |
| 116 | 116 | honest |
| 117 | +- fixed: fpm-style suffix classification in `realworld_suffix_scan.f90` first |
| 118 | + needed fixed-length character arrays to lower as real element-addressable |
| 119 | + arrays instead of scalar strings, then needed scalar character dummy intrinsics |
| 120 | + like `INDEX(name, suffix)` to carry a real runtime length story through |
| 121 | + `afs_c_strlen`, and finally exposed two optimizer-side bugs: mixed-width GEP |
| 122 | + offsets were being compared without pointee-size scaling in alias analysis, |
| 123 | + and SROA was scalarizing aggregates even when a GEP address escaped through |
| 124 | + the synthesized descriptor. The program is now a passing audit probe with |
| 125 | + cross-opt equality plus IR/asm/object/run reproducibility |
| 126 | +- fixed: dummy-array `SIZE(...)` queries in `realworld_assumed_shape_size.f90` |
| 127 | + were not actually using assumed-shape descriptors because bare `(:)` dummy |
| 128 | + declarations lowered through the `Deferred` array-spec path, and then the |
| 129 | + synthesized descriptor lost `rank` and `flags` at `-O2+` because mixed-width |
| 130 | + GEP offsets in alias analysis made descriptor field stores look like they |
| 131 | + overlapped. Assumed-shape dummies now classify as descriptor-backed, query |
| 132 | + results are kept in default-kind scalars, and the real-world canary now |
| 133 | + passes across optimization levels with deterministic artifacts |
| 117 | 134 | - proven: LICM hoists invariant scalar dummy loads out of a real-world affine |
| 118 | 135 | update loop in `realworld_affine_shift.f90` once BCE clears the loop body |
| 119 | 136 | - proven: GVN reduces duplicated branch-join PURE helper calls in |
@@ -133,14 +150,6 @@ Current audit findings: |
| 133 | 150 | (`realworld_ipo_chain.f90`), small-loop DO CONCURRENT exploitation |
| 134 | 151 | (`realworld_doconc_square.f90`), and explicit-DO vectorization onto the bulk |
| 135 | 152 | runtime kernels (`realworld_vector_stage.f90`) |
| 136 | | -- deferred with living XFAIL: `FPM-SUFFIX-1` fpm-style source suffix scan still |
| 137 | | - fails after parsing with an `i32`/`i64` IR store mismatch |
| 138 | | -- deferred with living XFAIL: `ASHAPE-SIZE-1` dummy-array `SIZE(...)` lowering |
| 139 | | - still routes dummy arrays into the descriptor runtime path even though ordinary |
| 140 | | - dummy arrays are carried as base pointers today. The default-integer query |
| 141 | | - typing bug is now fixed, so the remaining failure is the real descriptor |
| 142 | | - mismatch: `realworld_assumed_shape_size.f90` reaches `afs_array_size` with |
| 143 | | - bogus dummy-array metadata and panics in the runtime |
| 144 | 153 | - separately deferred parser gap: typed character array constructors using an |
| 145 | 154 | explicit type-spec inside `[]` |
| 146 | 155 | |
@@ -149,7 +158,7 @@ Current audit corpus snapshot: |
| 149 | 158 | - `172` programs with `CHECK` |
| 150 | 159 | - `30` programs with `IR_CHECK` |
| 151 | 160 | - `6` programs with `IR_NOT` |
| 152 | | -- `2` living `XFAIL`s |
| 161 | +- `0` living `XFAIL`s |
| 153 | 162 | |
| 154 | 163 | ## Brutal Audit Priorities |
| 155 | 164 | |