Changeset fc9d167


Ignore:
Timestamp:
May 1, 2026, 5:06:35 PM (63 minutes ago)
Author:
Michael Brooks <mlbrooks@…>
Branches:
master
Parents:
16d9c3a
Message:

Slightly loosen a test that has failed on 32-bit build lately.

Since 16d9c3a, this test was failing on all builds. The present change in not 32-bit specific; it's expected to fix this particular test, on all builds.

Note there are further 32-bit issues remaining, even after this fix.

Test is: array-collections/c-dependent

Loosening is: Adjust test's scope to avoid exercising "truly incorrect" C code; which may receive compile-time array-bound warnings on sufficiently advanced C compilers. In test code and .expect, switch from passing incorrect bounds to passing correct bounds; the point of the test (newly clarified, always foremost) is that CFA handles C's dependently sized VLA parameter.

Location:
tests/array-collections
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • tests/array-collections/.expect/c-dependent.txt

    r16d9c3a rfc9d167  
    1 bound_ptr_allow 999: 1.1 1.2 1.3
     1bound_ptr_allow 42: 1.1 1.2 1.3
    22bound_ar_allow 41:
    331.1 1.2 1.3
  • tests/array-collections/c-dependent.cfa

    r16d9c3a rfc9d167  
    1 void iota1( int n, float * a, float base ) {
     1// Purpose:  Demonstrate that aruably-dependent types, like `void (*)( size_t n, float[n] )`,
     2// which are valid in C, work also in CFA.  It's a C-compatibility test.
     3// So, here we exercise code that a C compiler that omnisciently warns about bounds would accept.
     4
     5// Note this test was once written with a broader intent, articulated after the fact as either of:
     6// - demonstrate how permissive this C-compatibility feature is,
     7//   even though gcc continually works to clamp down in these areas
     8// - demonstrate that CFA lowering does not get in the way of C's warnings in these areas
     9// Current decision is these qualities (while desirable) are too fickle to be pursued practically.
     10
     11void iota1( size_t n, float * a, float base ) {
    212    for (i; n) {
    313        a[i] = base + 0.1f * (float)(i + 1);
     
    1121    float a[42];
    1222    iota1( 42, a, 1.0 );
    13     f__bound_ptr_allow( 999, a );
     23    f__bound_ptr_allow( 42, a );  // pass actual size (42)  ==>  bounds ok
    1424}
    1525
     26// note dimension `n + 1`, exercising nontrivial dim-expression
    1627void f__bound_ar_allow( size_t n, float a[][n + 1] ) {
    1728    printf( "bound_ar_allow %zd:\n", n );
     
    2536    iota1( 42, a[1], 2.0 );
    2637    iota1( 42, a[2], 3.0 );
    27     f__bound_ar_allow( 41, a );
     38    f__bound_ar_allow( 41, a );  // n == 41  ==>  len(a) == 42  =>  bounds ok
    2839}
    2940
Note: See TracChangeset for help on using the changeset viewer.