<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/55941>55941</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Segementation fault when using Legacy Pass Manager FunctionPass
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ndaoud08
      </td>
    </tr>
</table>

<pre>
    Hello,

I have a pass that prints the function name and inserts a call to a function `test` in the beginning of each basic block. Now this pass runs with some programs and crashes with other ones, for example it runs fine with factorial code, however when run on [stream](https://www.cs.virginia.edu/stream/) benchmark (serial), it crashes with seg. fault. Same with parallel programs, runs on simple hello world mpi program, but when run with jacobi for example it crashes.

Here's the output message when run on stream (serial):

Cmd:
```
clang -flegacy-pass-manager -Xclang -load -Xclang ../skeleton/build/libSkeletonPass.so -c stream.c
```
Output:
```
I saw a function called main!
I saw a function called checktick!
I saw a function called mysecond!
I saw a function called checkSTREAMresults!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang -flegacy-pass-manager -Xclang -load -Xclang ../skeleton/build/libSkeletonPass.so -c stream.c
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'stream.c'.
4.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@main'
Segmentation fault (core dumped)
```

The Pass (Skeleton.cpp):
```
struct SkeletonPass : public FunctionPass {
    static char ID;
    SkeletonPass() : FunctionPass(ID) {}

    virtual bool runOnFunction(Function &F) {

      errs() << "I saw a function called " << F.getName() << "!\n";
      LLVMContext &context = F.getContext();
      auto module                  = F.getParent();
      Type        *Void;
      Void  = Type::getVoidTy(context);

      auto bbFunc = module->getOrInsertFunction("test", Void);

      for (Function::iterator BB = F.begin(), BE = F.end(); BB != BE; ++BB) {
        IRBuilder<> builder(&*BB->begin());
        builder.CreateCall(bbFunc);
      }
      return true;
    }
  };
  ```
And lib.c:
```
#include "stdio.h"

void test () {
    printf("Inside the instrumented function\n");
}
```

LLVM & Clang versions:

```
llvm-config --version 
14.0.0
``` 
```
clang --version
Ubuntu clang version 14.0.0-1ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9Vslu4zgQ_Rr5QliQrXjJwQcvyXSAXoJOptG3AUWVbHZoUeASJ38_VaRky07SM5jDGIYtkVWPtbyqYqHL18UnUEon43WSbZJsGX_v2I4_A-Os4dYyt-OONUbWjp6BVb4WTuqa1XyPQnXJZG3B4C5ngivFnMano1QyzRxYh38oFwAK2Mq6lvWW6YoBFztWcCsFK5QWTyn7qg8oJm083fjasoN0O2Y1HtcYvTV8b8O5wnC7g3ZbI7RhugaL3rBKGwYvfN8oYNJFlErWEGUrLpw2kismdAkkv9MHeEb9ww5qkmZk-WRlnQG-TyabZDzfOdfYJF8m41v8Hg6HVNj0WRp0RvIUSo-rrTxJXKOftdjtuXliqI0RwvNwmU5Di85st7BN0SivXMoeKKphteEGwwnq6DSpBk_QOCuDbztKHztoo0q2b2QnSpKFdyd3AuAvLnQhL2PTWpL2GfAJDIZlFhOuvWsQaw_W8i2chSj6e-5fvuwjrfflaWWatd_wKhRHDgwrBVsuXoeU7uGe13iGYcOf7a7SvDy-pSnF-AkUOF3jY-GlKvFfyeKhXb1HlNRqNhStcal49_BvwamPTLtjlh_6LCZiA4aYSzx39HshsQPx5KR4-kfJ_asFoevy30E-PH6_WX4xYJEn9qhy__lm-XDDrC_2mEyOad8yA402jgrxnLRbZIEvUqGJoko9d39DpM0vEA5fpbWeSui2rWyhfAmBBoEnWKrom-EiVE2DBxktkBhoo9XexGXSxDRoIbnDDeKKFUY2ruXYg0MQVvp9c4x_lrLwuY_8Zdxs_R6w5aAE-3-JMmpNSfI16CrJb6gQkd4M2yCgZ9i0KqkgCo9b4TX2EbaFGgynvMXNvN387mO7Cw0Ny-q2yy7ZwL5ET3CdKmqvS491ScXXWTWetXG7-gDv53zKNss_hmgr_rG7GlV9POEBnQ1PLfypLY9nyVUW-Txr0wJbCnlwIHYjKmyhDYRcQUnV_V61xN9H5Mh9tGjeBTkVTXPWE84Vo52snxJGCW98oXAgdHGK67NVVKIIWLJSYFlww-42Sd7b6oOhJdSICbKPhcuoRBuIOdv0nSAE7OnO42wotFZE3m91p4yKt6cATm87jAsAxsCY0-Fr_KL4-KPixq1O6jbdgvuKE-CNMtX7ZF3TU99bxj5__vFlrWsHL5Suqege801Ea_ci4IUu99giWsa9-RwR7rlBWrwL8PjaHDWT8fKHluWFBC1FLJIlIuRLxKTlx9dAr9a8E_QbC4uCoh5AorHEdAT5Zu7CzaOXHoxPuG1QwNbh8I-QaQr28hktk44KGHdWq9b_cFlpfUfE1U27DtS124gEacwPbqxu6D0Zr_C7Wp3xo4vT3fcVdSOseEruDSvaN0KbYhBXK3Lv7NzLsLNOKV1jj3CwRiKhbIzTW_Ejx-OrAecNXsWMhzPBnhg9nrYuqnaJTRAbKXamD8o6Gefd4MBEWFdKne4oJb0kPBMvKFWso3o_TuG6WcV8Yo5lO4Jk6GzUpLBsujLqyqKf52NRv9eoqGKoVNg6zAq89lmEsRcXlwvVMCaRrJXEWTNsdVg7Ma7SLM0u1Njv7jwdQFz8s_C18-2Y66Aj6HDkw2Y77B9xLgLdWtjLfPrX9GrYiKGStX8ZbmvftWGkREmFAir0Um3lS3u7wPCFlrORhrZwIHpraDzK-l1rB-UiL6_zaz5w0ilY4ISAyxERroPe0jz6HObz2VQ767sDb9Tiv99IJpPrq9FgtxjlFYyy68l8ejUrstG4mgDPuJgV-SibirwaKF6Asgu8vyMvajiwAEEcmWwGcjHOxuNsms1Ho_x6NEkhn4uimsM0y67hKq9wLALORZWSHak224FZBJPwZmVxU0nr7GkT_ZLbGiAch_jYsXbaLOqSa19m80E4exFs_xsIHhA-">