Skip to content

PTS cast to local loophole for incomplete types #120

@GoogleCodeExporter

Description

@GoogleCodeExporter
UPC 1.3 6.4.3:

  If a non-null pointer-to-shared is cast to a pointer-to-local and the affinity
  of any byte comprising the pointed-to shared object is not to the current
  thread, the result is undefined.

This language prohibits invalid cast-to-local for pointers to remote objects. 
However, as currently specified there is a loophole (or at least an ambiguity), 
for the case of a pointer-to-shared with incomplete referent type. Such 
pointers do not "point-to" any object, and therefore the requirement is 
trivially satisfied, although we still need to prohibit such casts.

Consider:

  shared int x;
  int main() {
     shared void *svp = &x;
     void *lvp = (void *)svp; // svp does not point to an object type
     int *lip = (int *)lvp;
     *lip = 7;
     return 0;
  }

The cast in the second line needs to have an undefined result when MYTHREAD!=0, 
and most implementations and users probably assume that is the case. However 
the current language is not strong enough to prohibit this cast because the 
referent type is incomplete - svp does not point to an object, and therefore 
there are no bytes to fail the affinity check.

The rule should probably be strengthened with an additional clause to cover 
pointers to incomplete types (eg possibly requiring 
upc_threadof(ptr_expression) to equal the value of MYTHREAD).

Original issue reported on code.google.com by danbonachea on 6 Mar 2014 at 2:53

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions