Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

segmentation fault of target program caused by loop-reroll with "opt -mem2reg -loop-unswitch -indvars -loop-rotate -loop-unswitch -jump-threading -loop-unroll -jump-threading -loop-reroll" #41612

Closed
coffezhou mannequin opened this issue Jun 13, 2019 · 2 comments
Labels
bugzilla Issues migrated from bugzilla loopoptim obsolete Issues with old (unsupported) versions of LLVM

Comments

@coffezhou
Copy link
Mannequin

coffezhou mannequin commented Jun 13, 2019

Bugzilla Link 42267
Version trunk
OS Linux
Attachments .bc file of the source code, small-opt.bc
CC @efriedma-quic,@fhahn

Extended Description

$clang -v
clang version 9.0.0 (trunk 362492)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/jack-zhou/Documents/llvm/llvm_truck/llvm2/build/bin
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.4.0
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64


$gcc small.c -o small1.out && ./small1.out
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

$clang small.c -o small2.out && ./small2.out
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


$clang -O3 -c -emit-llvm  -mllvm -disable-llvm-optzns small.c

$opt -mem2reg -loop-unswitch -indvars -loop-rotate -loop-unswitch -jump-threading -loop-unroll -jump-threading  small.bc -o small-opt.bc

$clang small-opt.bc -o small3.out && ./small3.out
Segmentation fault (core dumped)

without loop-reroll pass, the output is correct.

$$opt -mem2reg -loop-unswitch -indvars -loop-rotate -loop-unswitch -jump-threading -loop-unroll -jump-threading  small.bc -o small-opt1.bc

$clang small-opt1.bc -o small4.out && ./small4.out
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
#include<stdio.h>
int a[8][10][2];
void main() {
  int b, c, d;
  for (b = 0; b < 8; b++)
    for (c = 0; c < 10; c++)
      for (d = 0; d < 2; d++)
        printf("%d", a[b][c][d]);
}
@fhahn
Copy link
Contributor

fhahn commented Jul 11, 2019

small-before-reroll.bc
I've attached small-before-reroll.bc, which requires only -loop-reroll to trigger different behavior

opt -loop-reroll small-before-reroll.bc -o small-opt.bc 
clang small-opt.bc -o small3.out && ./small3.out
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001935631468168495753894372981769107551144159403213319694483121701077349723593702-187904742400206211048847123191027111677721701677721705160006147219694483121701077349016345576961852404336160041688918524002232036621151163515019400000000000000000000000000000000000000000000000

clang small-before-reroll -o small3.out && ./small3.out
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

@llvmbot llvmbot transferred this issue from llvm/llvm-bugzilla-archive Dec 10, 2021
@nikic
Copy link
Contributor

nikic commented Feb 10, 2024

The LoopReroll pass has been removed by #80972.

@nikic nikic closed this as not planned Won't fix, can't repro, duplicate, stale Feb 10, 2024
@Endilll Endilll added the obsolete Issues with old (unsupported) versions of LLVM label Feb 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugzilla Issues migrated from bugzilla loopoptim obsolete Issues with old (unsupported) versions of LLVM
Projects
None yet
Development

No branches or pull requests

4 participants