Bug 27388 - omp_is_private issues
Summary: omp_is_private issues
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: middle-end (show other bugs)
Version: 4.2.0
: P3 normal
Target Milestone: ---
Assignee: Jakub Jelinek
URL: http://gcc.gnu.org/ml/gcc-patches/200...
Keywords: openmp
Depends on:
Blocks:
 
Reported: 2006-05-02 14:19 UTC by Jakub Jelinek
Modified: 2006-05-04 09:34 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2006-05-02 22:43:25


Attachments
pr27388.patch (487 bytes, patch)
2006-05-02 14:38 UTC, Jakub Jelinek
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Jakub Jelinek 2006-05-02 14:19:12 UTC
void
foo (void)
{
  int i;
  i = 0;
#pragma omp parallel shared (i)
    {
#pragma omp master
      i++;
#pragma omp parallel for
      for (i = 0; i < 10; i++)
        ;
    }
}

results in very weird omplower dump:
1) #pragma omp parallel shared(iD.1922) private(iD.1922)
   for the outer parallel
   (surely we don't want i being shared and private at the same time,
   just shared here)
2) #pragma omp parallel shared(iD.1922)
   for the inner parallel - in this case i certainly ought to be private,
   not shared
I think 1) is caused by n->value = GOVD_PRIVATE; messing up outer context,
while 2) probably because omp_is_private shouldn't recurse over is_parallel
contexts.
Comment 1 Jakub Jelinek 2006-05-02 14:38:17 UTC
Created attachment 11360 [details]
pr27388.patch

Something like this cures this but I'm really not sure what exactly is
omp_is_private supposed to do.  Richard, can you please look at this?
Comment 2 Richard Henderson 2006-05-03 01:45:07 UTC
omp_is_private is supposed to prevent extra PRIVATE clauses from being added
when they're not needed -- since each PRIVATE clause results in a new decl 
being created.

I believe your patch is correct.
Comment 3 Jakub Jelinek 2006-05-04 06:34:13 UTC
Subject: Bug 27388

Author: jakub
Date: Thu May  4 06:34:06 2006
New Revision: 113514

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=113514
Log:
	PR middle-end/27388
	* gimplify.c (omp_is_private): If var is shared in some outer context,
	return false instead of true.  Stop searching on parallel context
	boundary.

	* gcc.dg/gomp/pr27388-1.c: New test.
	* gcc.dg/gomp/pr27388-2.c: New test.
	* gcc.dg/gomp/pr27388-3.c: New test.

Added:
    trunk/gcc/testsuite/gcc.dg/gomp/pr27388-1.c
    trunk/gcc/testsuite/gcc.dg/gomp/pr27388-2.c
    trunk/gcc/testsuite/gcc.dg/gomp/pr27388-3.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/gimplify.c
    trunk/gcc/testsuite/ChangeLog

Comment 4 Jakub Jelinek 2006-05-04 09:34:29 UTC
Fixed in SVN.