Bug 29965 - OpenMP vs always throw in a loop
Summary: OpenMP vs always throw in a loop
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: middle-end (show other bugs)
Version: 4.3.0
: P3 normal
Target Milestone: 4.2.0
Assignee: Jakub Jelinek
URL:
Keywords: ice-on-invalid-code, openmp
Depends on:
Blocks:
 
Reported: 2006-11-23 22:57 UTC by Andrew Pinski
Modified: 2007-01-10 19:15 UTC (History)
1 user (show)

See Also:
Host:
Target: i686-pc-linux-gnu
Build:
Known to work:
Known to fail:
Last reconfirmed: 2006-11-29 20:21:33


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Pinski 2006-11-23 22:57:32 UTC
The following program causes an ICE with -fopenmp -fexceptions:
extern void bar (int);

void
foo (int n)
{
  int i;
#pragma omp parallel for schedule(dynamic)
  for (i = 0; i < n; i++)
    {
    bar (0);
      @throw 0;
    }
}
Comment 1 Andrew Pinski 2006-11-23 23:04:05 UTC
Actually you can reproduce the same ICE (with the same backtrace) with C++ code:
extern void bar (int);

void
foo (int n)
{
  int i;
#pragma omp parallel for schedule(dynamic)
  for (i = 0; i < n; i++)
    {
      throw 0;
    }
}


So this is not specific to Objective-C any more.
Comment 2 Jakub Jelinek 2006-11-26 19:16:17 UTC
That's actually ICE on invalid, you can't throw out of a parallel region.
OpenMP 2.5, section 2.4 says:
"A throw executed inside a parallel region must cause execution to resume within the same parallel region, and it must be caught by the same thread that threw the exception."
Comment 3 Jakub Jelinek 2006-11-29 20:21:33 UTC
This is similar to PR27328 which was only fixed for omp parallel (and even then
only when not inlined or inlined at most once).
Started fixing these omp region with NULL region->exit and/or region->cond
issues today, but still have some to finish tomorrow.
Comment 4 Jakub Jelinek 2006-12-04 10:21:12 UTC
Subject: Bug 29965

Author: jakub
Date: Mon Dec  4 10:20:51 2006
New Revision: 119483

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=119483
Log:
	PR middle-end/29965
	* omp-low.c (determine_parallel_type): Don't try to optimize combined
	parallels if region->exit or region->inner->exit is NULL.
	(expand_omp_parallel): Handle NULL region->exit even if cfg is already
	built.
	(expand_omp_for_generic): Handle NULL region->cond and region->exit.
	(expand_omp_for): Use expand_omp_for_generic if either region->cond
	or region->exit is NULL.
	(expand_omp_sections): Handle NULL region->cond or region->exit.
	(expand_omp_synch): 

	* gcc.dg/gomp/pr29965-1.c: New test.
	* gcc.dg/gomp/pr29965-2.c: New test.
	* gcc.dg/gomp/pr29965-3.c: New test.
	* gcc.dg/gomp/pr29965-4.c: New test.
	* gcc.dg/gomp/pr29965-5.c: New test.
	* gcc.dg/gomp/pr29965-6.c: New test.
	* g++.dg/gomp/pr29965-1.C: New test.
	* g++.dg/gomp/pr29965-2.C: New test.
	* g++.dg/gomp/pr29965-3.C: New test.
	* g++.dg/gomp/pr29965-4.C: New test.
	* g++.dg/gomp/pr29965-5.C: New test.
	* g++.dg/gomp/pr29965-6.C: New test.
	* g++.dg/gomp/pr29965-7.C: New test.
	* g++.dg/gomp/pr29965-8.C: New test.
	* g++.dg/gomp/pr29965-9.C: New test.
	* g++.dg/gomp/pr29965-10.C: New test.

Added:
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-1.C
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-10.C
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-2.C
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-3.C
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-4.C
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-5.C
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-6.C
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-7.C
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-8.C
    trunk/gcc/testsuite/g++.dg/gomp/pr29965-9.C
    trunk/gcc/testsuite/gcc.dg/gomp/pr29965-1.c
    trunk/gcc/testsuite/gcc.dg/gomp/pr29965-2.c
    trunk/gcc/testsuite/gcc.dg/gomp/pr29965-3.c
    trunk/gcc/testsuite/gcc.dg/gomp/pr29965-4.c
    trunk/gcc/testsuite/gcc.dg/gomp/pr29965-5.c
    trunk/gcc/testsuite/gcc.dg/gomp/pr29965-6.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/omp-low.c
    trunk/gcc/testsuite/ChangeLog

Comment 5 Jakub Jelinek 2006-12-04 10:23:19 UTC
Subject: Bug 29965

Author: jakub
Date: Mon Dec  4 10:23:06 2006
New Revision: 119484

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=119484
Log:
	PR middle-end/29965
	* omp-low.c (determine_parallel_type): Don't try to optimize combined
	parallels if region->exit or region->inner->exit is NULL.
	(expand_omp_parallel): Handle NULL region->exit even if cfg is already
	built.
	(expand_omp_for_generic): Handle NULL region->cond and region->exit.
	(expand_omp_for): Use expand_omp_for_generic if either region->cond
	or region->exit is NULL.
	(expand_omp_sections): Handle NULL region->cond or region->exit.
	(expand_omp_synch): 

	* gcc.dg/gomp/pr29965-1.c: New test.
	* gcc.dg/gomp/pr29965-2.c: New test.
	* gcc.dg/gomp/pr29965-3.c: New test.
	* gcc.dg/gomp/pr29965-4.c: New test.
	* gcc.dg/gomp/pr29965-5.c: New test.
	* gcc.dg/gomp/pr29965-6.c: New test.
	* g++.dg/gomp/pr29965-1.C: New test.
	* g++.dg/gomp/pr29965-2.C: New test.
	* g++.dg/gomp/pr29965-3.C: New test.
	* g++.dg/gomp/pr29965-4.C: New test.
	* g++.dg/gomp/pr29965-5.C: New test.
	* g++.dg/gomp/pr29965-6.C: New test.
	* g++.dg/gomp/pr29965-7.C: New test.
	* g++.dg/gomp/pr29965-8.C: New test.
	* g++.dg/gomp/pr29965-9.C: New test.
	* g++.dg/gomp/pr29965-10.C: New test.

Added:
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-1.C
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-10.C
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-2.C
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-3.C
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-4.C
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-5.C
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-6.C
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-7.C
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-8.C
    branches/gcc-4_2-branch/gcc/testsuite/g++.dg/gomp/pr29965-9.C
    branches/gcc-4_2-branch/gcc/testsuite/gcc.dg/gomp/pr29965-1.c
    branches/gcc-4_2-branch/gcc/testsuite/gcc.dg/gomp/pr29965-2.c
    branches/gcc-4_2-branch/gcc/testsuite/gcc.dg/gomp/pr29965-3.c
    branches/gcc-4_2-branch/gcc/testsuite/gcc.dg/gomp/pr29965-4.c
    branches/gcc-4_2-branch/gcc/testsuite/gcc.dg/gomp/pr29965-5.c
    branches/gcc-4_2-branch/gcc/testsuite/gcc.dg/gomp/pr29965-6.c
Modified:
    branches/gcc-4_2-branch/gcc/ChangeLog
    branches/gcc-4_2-branch/gcc/omp-low.c
    branches/gcc-4_2-branch/gcc/testsuite/ChangeLog

Comment 6 Jakub Jelinek 2006-12-04 10:36:27 UTC
Fixed in SVN.