[Bug middle-end/90861] New: OpenACC 'declare' not cleaning up for VLAs

tschwinge at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Jun 12 16:17:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90861

            Bug ID: 90861
           Summary: OpenACC 'declare' not cleaning up for VLAs
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Keywords: openacc
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tschwinge at gcc dot gnu.org
  Target Milestone: ---

Given:

    #define N_f1 1000
    int A_f1[N_f1];
    #pragma acc declare copy(A_f1)

..., in '-fdump-tree-gimple' we get the expected:

      try
        {
          #pragma omp target oacc_declare map(to:A_f1 [len: 4000])
        }
      finally
        {
          #pragma omp target oacc_declare map(from:A_f1)
          A_f1 = {CLOBBER};
        }

However, given:

    int N_f2 = 1000;
    int A_f2[N_f2];
    #pragma acc declare copy(A_f2)

..., the cleanup ('from') is missing, so device memory gets allocated
corresponding to local variable 'A_f2', but isn't deallocated and deassociated
from the stack address of 'A_f2' when that one goes out of scope.  As stack
space will be re-used in different functions called consecutively, libgomp will
then abort because of 'libgomp: Trying to map into device
[0x7ffd86278870..0x7ffd86279810) object when [0x7ffd86278880..0x7ffd86279820)
is already mapped', if running two such VLA functions consecutively, for
example.  This can be easily seen with the
'libgomp.oacc-c-c++-common/declare-vla.c' test case, when duplicating its
'main' function into two functions, which are then called consecutively.

'libgomp.oacc-c-c++-common/declare-vla.c' has been added in r246381 for
PR80029; I don't know what the behavior would've been before that.

In <http://mid.mail-archive.com/874ly0h7dc.fsf@euler.schwinge.homeip.net> there
are unanswered questions, but I'm not sure if they're relevant to this problem
here.


More information about the Gcc-bugs mailing list