Opened 3 years ago

Last modified 11 months ago

#88 new defect

Arrays of references

Reported by: Rob Schluntz Owned by:
Priority: minor Component: cfa-cc
Version: 1.0 Keywords: reference array subscript
Cc:

Description (last modified by Thierry Delisle)

Currently the subscript operation does not work for arrays of references:

int main() {
  int & x[10];
  x[3];
}

$ cfa test.c
error: No reasonable alternatives for expression Applying untyped: 
  Name: ?[?]
...to: 
  Name: x
  constant expression (3 3: signed int)

This is because subscript is defined as

forall( dtype T | sized(T) ) T & ?[?]( T *, ptrdiff_t );

And type parameters do not currently bind to reference types. To make this work correctly, we want to allow bare type variables to strip references, but not otherwise.

Changing this line in bindVar in Unify.cc from

other = other->stripReferences();

to

if ( widenMode.widenSecond ) other = other->stripReferences();

strips references for bare type parameters and not otherwise, as desired. For one reason or another this causes a 2x slowdown.

Change History (1)

comment:1 Changed 11 months ago by Thierry Delisle

Description: modified (diff)
Note: See TracTickets for help on using tickets.