Bug 52230 - OpenMP: Simple C program triggers SIGSEGV at execution
Summary: OpenMP: Simple C program triggers SIGSEGV at execution
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: middle-end (show other bugs)
Version: 4.2.1
: P3 normal
Target Milestone: 4.6.3
Assignee: Jakub Jelinek
URL:
Keywords: openmp
Depends on:
Blocks:
 
Reported: 2012-02-13 11:17 UTC by fanusergiu
Modified: 2012-07-02 14:11 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2012-02-13 00:00:00


Attachments
gcc47-pr52230.patch (418 bytes, patch)
2012-02-13 12:05 UTC, Jakub Jelinek
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description fanusergiu 2012-02-13 11:17:56 UTC
bash-3.2$ gcc -v
Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.1~22/src/configure --disable-checking --enable-werror --prefix=/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.1~22/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)


The following program is compiled with -fopenmp. (gcc -fopenmp -Wall a.c)
There are no warnings, no compilation errors.
OS: OSX Lion 10.7.3

int main(void)
{
int i;
#pragma omp parallel for
for(i=0;i<4;i++) {
    while(1);
}
return 0;
}


If I run the program several times, sometimes I get a SIGSEGV. If you don't receive the SIGSEGV in the first 5-7 seconds, just intrerupt it (via Ctrl-C) and run it again.

bash-3.2$ ./a.out
Segmentation fault: 11 (core dumped)
Comment 1 Jakub Jelinek 2012-02-13 11:24:22 UTC
GCC 4.2 is not supported for several years already, and furthermore if I read this well, this isn't gcc at all, but LLVM.
Comment 2 fanusergiu 2012-02-13 11:31:56 UTC
(In reply to comment #1)
> GCC 4.2 is not supported for several years already, and furthermore if I read
> this well, this isn't gcc at all, but LLVM.

Thanks for the fast reply, I tried it also on Linux Mint 64bit, gcc version 4.6.1. Same result.. (SIGSEGV) but faster (I get it in under 1 sec). I also tried it on a CentOS 6.2 with gcc 4.4.6. gomp_loop_static_start() gets called, with parameters like => chunk_size=140737488347560, istart=0x7fffffffe1b0, iend=0xca. The last one is a pointer which gets dereferenced.. hence getting the SIGSEGV.

I think it's not a LLVM bug.
Comment 3 Jakub Jelinek 2012-02-13 12:00:38 UTC
You're right, but please report bugs for supported compilers only next time.
The problem only happens if the omp for body doesn't fall through, i.e. only on very questionable sources like this one.
Comment 4 Jakub Jelinek 2012-02-13 12:05:12 UTC
Created attachment 26649 [details]
gcc47-pr52230.patch

Untested fix.
Comment 5 Jakub Jelinek 2012-02-13 19:57:28 UTC
Author: jakub
Date: Mon Feb 13 19:57:24 2012
New Revision: 184165

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=184165
Log:
	PR middle-end/52230
	* omp-low.c (expand_omp_for): If a static schedule without
	chunk size has NULL region->cont, force fd.chunk_size to be
	integer_zero_node.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/omp-low.c
Comment 6 Jakub Jelinek 2012-02-13 20:04:12 UTC
Fixed for trunk, might backport it to 4.[654] eventually, but it isn't high priority, given that it doesn't make any sense to have non-fallthru omp for body, using omp for then isn't really appropriate.
Comment 7 Jakub Jelinek 2012-02-14 23:32:44 UTC
Author: jakub
Date: Tue Feb 14 23:32:39 2012
New Revision: 184240

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=184240
Log:
	Backported from mainline
	2012-02-13  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/52230
	* omp-low.c (expand_omp_for): If a static schedule without
	chunk size has NULL region->cont, force fd.chunk_size to be
	integer_zero_node.

Modified:
    branches/gcc-4_6-branch/gcc/ChangeLog
    branches/gcc-4_6-branch/gcc/omp-low.c
Comment 8 Richard Biener 2012-03-22 08:27:35 UTC
GCC 4.7.0 is being released, adjusting target milestone.
Comment 9 Richard Biener 2012-07-02 14:11:37 UTC
Fixed for 4.6.3.