Running the convolve_2d.cpp test causes an alignment error on ARM
- Dominant language
- C++
- Stars
- 199
- Forks
- 171
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 10
Description
### Actual behavior
When running the convolve_2d.cpp test module (Boost 1.81.0) on a 32-bit ARM target, there is an alignment
exception (fault) in the `test_convolve_2d_with_image_using_float32_t()` test case. The alignment exception
occurs when the `convolve_2d_impl()` function attempts to access the first pixel in the second row of
the `src_view`. The address computed for `src_view(col_boundary, row_boundary)[0]` is not a multiple of
the size of the `gil::float32_t` array element.
The apparent cause is that the test case creates the `gil::interleaved_view()` calls for the source and output
images use the number of columns in the row rather than the length in bytes of each row as the
last argument to `gill::interleaved_view()`. Likely
```
gil::gray32fc_view_t src_view =
gil::interleaved_view(9, 9, reinterpret_cast(img), 9);
gil::gray32fc_view_t exp_out_view =
gil::interleaved_view(9, 9, reinterpret_cast(exp_output), 9);
```
should be
```
gil::gray32fc_view_t src_view =
gil::interleaved_view(9, 9, reinterpret_cast(img), 9 * sizeof (gil::float32_t));
gil::gray32fc_view_t exp_out_view =
gil::interleaved_view(9, 9, reinterpret_cast(exp_output), 9 * sizeof (gil::float32_t));
```
### Expected behavior
The test should not cause an alignment exception and should complete successfully.
### C++ Minimal Working Example
Use the convolve_2d.cpp test case on a target that gives exceptions for misaligned accesses.
### Environment
- Compiler version:
- Build settings:
- Version (Git ref or ``):
Contributor guide
Assessment
This issue has not been assessed yet.