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

    <tr>
        <th>Summary</th>
        <td>
            Polly segfaults on kernel C code
        </td>
    </tr>

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

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

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

<pre>
    Hi there, I am still somewhat of a newbie when it comes to LLVM bug reports so please bear with me. I tried to provide as much information as I can.

I am trying to compile a 4.14 Linux kernel source (repository found [here](https://github.com/DavinciCodeOS/kernel_xiaomi_sm6150)). Ever since a while ago, the compiler segfaults when trying to build it.

The compilers I am comparing here are two clang trunk builds from September 7th 2022 (I'll refer to this as *clang-working*) and one from October 19th 2022 (I'll refer to this as *clang-broken*). I have tried versions prior to October 19th already and those were broken too, but I don't have the resources to bisect this at the moment. I built these two clangs with ClangBuiltLinux's [tc-build](https://github.com/ClangBuiltLinux/tc-build), with PGO, thin LTO and BOLT instrumentation.

The kernel source I have uses Polly via `-mllvm -polly -mllvm -polly-run-dce -mllvm -polly-run-inliner -mllvm -polly-ast-use-context -mllvm -polly-detect-keep-going -mllvm -polly-vectorizer=stripmine -mllvm -polly-invariant-load-hoisting`.

*clang-broken* segfaults when compiling [dp_catalog.c](https://github.com/DavinciCodeOS/kernel_xiaomi_sm6150/blob/13/drivers/gpu/drm/msm/dp/dp_catalog.c).

I've taken the arguments from the crash information and reduced the generated C file with all the includes.

Full arguments for reproduction (kernel source is in `/src`, outdir was `/src/out`, `/build/toolchain` was *clang-broken*):
```
/build/toolchain/bin/clang-16 \
-cc1 \
-triple aarch64-unknown-linux-gnu \
-emit-llvm-bc \
-flto=full \
-flto-unit \
-disable-free \
-clear-ast-before-backend \
-disable-llvm-verifier \
-discard-value-names \
-main-file-name dp_catalog.c \
-mrelocation-model static \
-fno-delete-null-pointer-checks \
-mframe-pointer=non-leaf \
-relaxed-aliasing \
-fno-optimize-sibling-calls \
-fmath-errno \
-ffp-contract=on \
-fno-rounding-math \
-mconstructor-aliases \
-target-cpu generic \
-target-feature +neon \
-target-feature +v8a \
-target-feature +reserve-x18 \
-no-implicit-float \
-target-abi aapcs \
-mllvm \
-aarch64-enable-global-merge=false \
-mllvm \
-treat-scalable-fixed-error-as-warning \
-debugger-tuning=gdb \
-ffunction-sections \
-fdata-sections \
-fcoverage-compilation-dir=/src/out \
-nostdsysteminc \
-nobuiltininc \
-D __KERNEL__ \
-D KASAN_SHADOW_SCALE_SHIFT=3 \
-D CONFIG_AS_LSE=1 \
-D CONFIG_VDSO32=1 \
-D KASAN_SHADOW_SCALE_SHIFT=3 \
-D CC_HAVE_ASM_GOTO \
-D KBUILD_BASENAME="dp_catalog" \
-D KBUILD_MODNAME="msm_drm" \
-fmacro-prefix-map=/src/= \
-O3 \
-Wall \
-Wundef \
-Wstrict-prototypes \
-Wno-trigraphs \
-Werror-implicit-function-declaration \
-Wno-format-security \
-Werror=unknown-warning-option \
-Wno-misleading-indentation \
-Wno-bool-operation \
-Wno-unsequenced \
-Wno-asm-operand-widths \
-Wno-frame-address \
-Wno-int-in-bool-context \
-Wno-address-of-packed-member \
-Wno-format-invalid-specifier \
-Wno-gnu \
-Wno-duplicate-decl-specifier \
-Wno-tautological-constant-out-of-range-compare \
-Wno-sometimes-uninitialized \
-Wno-tautological-compare \
-Wno-unused-but-set-variable \
-Wno-unused-const-variable \
-Wdeclaration-after-statement \
-Wno-pointer-sign \
-Wno-array-bounds \
-Werror=implicit-int \
-Werror=strict-prototypes \
-Werror=date-time \
-Werror=incompatible-pointer-types \
-Wno-initializer-overrides \
-Wno-unused-value \
-Wno-format \
-Wno-sign-compare \
-Wno-format-zero-length \
-Wno-uninitialized \
-Wno-pointer-to-enum-cast \
-Wno-unaligned-access \
-Wno-pointer-to-int-cast \
-std=gnu89 \
-fdebug-compilation-dir=/src/out \
-ferror-limit 19 \
-fvisibility=default \
-fsanitize=cfi-derived-cast,cfi-icall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall,shadow-call-stack \
-fsanitize-trap=cfi-derived-cast,cfi-icall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall \
-fsanitize-system-ignorelist=/build/toolchain/lib/clang/16.0.0/share/cfi_ignorelist.txt \
-fno-sanitize-memory-param-retval \
-fsanitize-cfi-cross-dso \
-fwrapv \
-stack-protector 2 \
-fno-builtin \
-fno-signed-char \
-fwchar-type=short \
-fno-signed-wchar \
-fgnuc-version=4.2.1 \
-fcolor-diagnostics \
-vectorize-loops \
-vectorize-slp \
-mllvm \
-polly \
-mllvm \
-polly-run-dce \
-mllvm \
-polly-run-inliner \
-mllvm \
-polly-ast-use-context \
-mllvm \
-polly-detect-keep-going \
-mllvm \
-polly-vectorizer=stripmine \
-mllvm \
-polly-invariant-load-hoisting \
-fsplit-lto-unit \
-faddrsig \
-x c dp_catalog.c
```

The file compiles fine with *clang-working* and with *clang-broken* after removing Polly parameters.

I reduced the file using [cvise](https://github.com/marxin/cvise) down to:

dp_catalog.c:
```c
typedef int u32;
#if 0
#else
typedef long __kernel_size_t;
#endif
#define __compiletime_assert(condition, msg, prefix, suffix)                   \
  void prefix(void);                                                           \
  prefix()
#define _compiletime_assert(condition, msg, prefix, suffix)                    \
  __compiletime_assert(, , prefix, )
#define compiletime_assert(condition, msg)                                     \
  _compiletime_assert(, , __compiletime_assert_, )
#if 0
#else
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(, )
#endif
#define container_of(ptr, type, member)                                        \
  ({                                                                           \
    void *__mptr = ptr;                                                        \
    BUILD_BUG_ON_MSG(, );                                                      \
    __mptr;                                                                    \
  })
#if 1
enum { DP_STREAM_1, DP_STREAM_MAX };
struct dp_dsc_cfg_data {
  u32 pps_word_len;
  u32 parity_word;
  u32 parity_word_len
} dp_write_io_data;
struct dp_catalog_private {
  int dp_catalog;
  char exe_mode[]
};
struct dp_catalog *dp_catalog_panel_dsc_cfg_dp_catalog;
int strcmp(char *, char *);
void memcpy(void *, void *, __kernel_size_t);
#endif
#define dp_catalog_get_priv(x)                                                 \
  ({                                                                           \
    struct dp_catalog *dp_catalog = container_of(x, , );                       \
    container_of(dp_catalog_panel_dsc_cfg_dp_catalog, , );                     \
  })
void dp_catalog_panel_dsc_cfg(struct dp_dsc_cfg_data *panel) {
  struct dp_catalog_private *catalog;
  if (panel >= DP_STREAM_MAX)
    return;
  catalog = dp_catalog_get_priv(panel);
  catalog->exe_mode;
  for (; panel->parity_word_len;)
    strcmp(catalog->exe_mode, "");
  for (; panel->pps_word_len;) {
    u32 data = 0;
    if (strcmp(catalog->exe_mode, ""))
      memcpy(&dp_write_io_data, &data, 0);
  }
}

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1WltT4zgW_jXhReVU4kAgDzwEAj1dA83U0DO9by7FlhMttuWV5AT61-93ZCexHAfYmdkuCLaOzkVH37lI6aVK3q5_kcyuhRaD8JZ9ZTxnxsosY0blYrvmlqmUcVaI7VIKtl2LgknLYhANs4o9PPz5yJbVimlRKm0N2FiZCW4EWwqu2VbaNcvFEJKtliIhnlKrjUwE44blVbxmskiVzrmVqqCxryzmxXAwWgxG8_rTWWX1myxWxA_lpczAz86H43P2IIvqlb0IXQiyutKxYIPwigwy0ir9xlJVFQkbXNy4ZV4sQF1bW5rBZD4I7_GzgpXVcgjBeFnwjSxieasS8fSM91py9Cq5ymVk8un4YjQIZ_gZsruN0MxgOlmzXTurVoo8CZfuDMUMsUp5lcE9zoGHpSwrmSVwqLfc7y1WU28JvXJNTLQExvFrt_BExkmOroqXWpRhqVY5exalFfkSmi_h_nAUhuSRr4PwEhurRQoClNu1NOTwQTh3goKt0i_QgXcsjnH4TBWilvgUW0XyxrP_ReBSqxdR1PIIAmu-EQ0O4DiDDTdAg1SO21PBMy148uaMsGsFOG1p4bVAzHY-XlYWQhMFDZe2EQ7faVGjwAF0KY2IbWOadfQc4C0s2UM-c2Om5U9Tg_aWnm9oggMYVBiCkI0D5-kPYXTEf79nJfDc1lp--_JUo0UW7OH7k1vvzdPDdwSFwb6SoS4wjgDi471xbWWw6N9Ulr2xjeRsMB0FeZZtchaUbtB7CwCbIAHz8agsMllgK3wKNzaAhiBWhRWvtkNNhIWjgxchymClCKo-fQOq0vKn0IPJAmuTZQ4dnUmy2ADmvLBBpngSrJVEMgIipyPPAccA64ZYHT9kBfYsKaOYW56p1TD-h8L_fpmpJf6MJ_hItCQ4k6Sycu8kKDf0mZTuo2UAQsFLbkAWAZc7YK8puFdu35tYdolEc9PJk8CJFkkVU0rFjJXAfnGLt1uWUhpy6OKITqJiQVmVCOMpvq9AbSlDFCJnagWhTgXc5IMMEQSUYi-wIqNj93DLVGUTiURPcb8nhfcYbibUow3y7xG6WbzmssBwzdSXLGhralPBXP80G98jCGPusxYznmLLb-vpQRyPW28EOsrQXMfr6XmArFmobRFkFJ_BqqhaU0UugUEgM1jGreE0swrwTcl1_iikoS4exhJp-DITQaqFaBuE2qhdJC0FPC6CJY-x6qSH02kHrmQqEYoePeY6CTY8q0RQcKrEB2oOjwSEAEdhbeS1Z2mRqdhBKciBdOwx5RlvqYVCTGeI6qDAchGgEmGvg3gt4hdPY6qhaUeHdwoIxTLT1hyo468iCXgmuamjsq1HlVbmSA2BkUsK2iAGcts6UsB-HQitC9UeTUuXjDSPLfQSZj2xmuo-iSPutsVgouxKCak2yXOhRVAIG8RlVYeV55aGmApuK02Nxk0hPMXHEzZX_F066pXQGxG8jq9a82C_zMtMxgBiimxoj2XwpQSYy9jbDZdOD-87sIvCgWqFtMWzIBcQQEDmmRHvcFtUYRsAb1kNZkmbiG0gv5lgy3Xhb2Yi0AuugBJbEQUaVsnS27GqcNkloKrs6n-LmACpvYRYIQ74ikoPpfUat8g6kN9OOJ73jE3Mm0EbhOTnEVzRl4U_vGBR9Ovd79_uHqLIG_51_jz_Fj3_Ml88_Yieb-cPd3j5ev8dqifexNunb_dfv0Tz5-jh-Q7UcR_1z8Xz0yQ8on5eyW30y_zPO2h5jL48oV_wpNz88fVhEd3Mn---zR_vnHPCQwIYUNN2PP3xaXGYjZoVueoV-sEXaxWU6PPkK2KpbLsdz62pT21zf3AvS_5AMIp2UvhBXQBaBtQcq-xb6QXhD-Af5JXm5dobr9F3CI0doBKB_K_r6uiLqasmAavS0r4dCcMSdqWgQbRLSEdycmmQ1lxCkVhK05l1Ji1RlsAuei2pCiP-U4mCqrZP4SavuYok2MrErru-qJMsTxJkiy4NiRe_tepdc9YRX_MFKg1KKjgJMoA7H_R6irqwTCaBKUXcrT40zS-VNJJUtB3oP9w2nGS0vLIKUMRUZymKDkxH5JJhWHsT4XS88RnpMIoSIQyVWRRaCft-HjmxI75PUFWgg03QhxMebOC6TWS2_lnOwt45LbAFPKWySPVTUCfVEbUrm0auumjgWvM37Bri4hjhAOUe49KXuqO_Gz67SQltCrmuV0PhvGQlJfedpX2RePC5DigXa5zfu3Map7m2pBdX3T2FR07sUoNDaFPoJIqVV71rXadRsF-HQtGrcvQSpqu6KsC5KqghiePjeGpJoNDqCEBhobpWVFczr3hR6ft8gUrrPJah77E48rYpG4k2CIcX-0b7J9yxpk03nNb-k-p3nEpEHB0_Emcm-m0aogDImueqoObL-hOKTWvG7tmseaK2rvciOMcvfUqRlF0B-Oc092qpS3eATUKTnOEUWHuyr_nP5HLX_NOBbDocDd0xZM3pTuseeqKDmKH1ciN1iXudSIlKvyFBItWiY7VAcq9tZDkKItJpYrx2dAvXbDykwIkuPt3Zl4UdzU0n0rWnRiaWpz3hNOCCk0J_rfTROmq-bZcRSI2D5roFrOfDcNjuPtBcZQBiIvmKmibpdZP7QzvO46rsp5isfKeDrC8ePqDvryI-M293OfHR3O51xUfzjy8wPuI4caXxEduJSw4Pa8j8IB8fK1Oq5Njp1tAri71jXv_B2X3SxZG7HWiuF3HqJ4PdXUHPLaC7ZfCJhwsXV_aYRsxsyPj61snFDvyoTecCt31X4SyommPgTYx09_GlbM71a33Id9PDGUOqoovAw02B-_QccXSJ0PiGgohaUaqrFbXjN828cCJTtr9qmAgcjnyOTMHoKGruhAy2PrJtdpzkZbp_Awe5N4oad1MZjrjBaQ_Z8Aq4TCQVCrokyc2K_tQ9Nj2ZKnVPM3b8b7_3jG2UTPZcV_Tmbk9uerg--68lfS-YhHZX9Q8vqq33hMfcbZInsMeuT5rVa8K7Nr1rUp_FUdfCE-A62N4c4P74Ej19ix6fvzSWt4x-x4jZ-yikNMgpcUYqBU9ptbt4pnpC4t1x4LNu8T1DFlz-HcS9I7tBOBJOFOWwmdF5k2z_6xD3pPd4fOfNv6rBk19b_fcCsk_y4HLRQda4fqGWl9F2LH6Lnr__fjd_jMa0osPr4_xfjn2XtuqbMCohiYmjOF1FdA9DMnbKkCNZWZoIlSGJ0I_vWRsSp2O1o56mOL7a3MsFKduCJCKpnLYeY5o0HpXoMdFEtu2hvN261zjodK2PeBUR3WmitlBZ2ek8rYLQ1VbIKbfvfXGsh9RDSJyXFJ-u26JL61t2eJ7tJzv4Irri8q1J0LvZ7eduSWkJOBXPLYtXwjo3QcGp5PppXP1fY_kD17vg7uSp112GfTckPS0dCZ_Z2o91nIg9t4mnNED5qeAK524m7VYL2O-gHw3YEdwR9ZTJSRBcR1d4fpjvraQF4EBT6Xbotp3eD6adicdMAdTt4-xApe-QCEHwoeOlad0cgNltsw6B1CPZbUnofmYfqenkJ9-xdTqqXY_ljlrCdm78vCFt89khtgfh9CitOb7p7nHkL4NwtM9OrR52366eievxdDoNx-Ho6uIsuZ4ks8mMn1lpM3FdN9yHrz1VsftOGIkINp9VOrt-p6Omo0nzh46o_8ZZBq_SmErQN5kXV-dX52fr68vpJD1fhkl6OR7x2dXl5IKnsQgnl1dJeJFO-FnGl2hlrinbhmEhtsyJIFddLM7kNf1fgfFoPAtH5-PwYsgTPo0h8WKSppOry9ngfCRyLrMh2TFUenWmr-uv3aqVAZHO7OZARMtDp1xxXSf3M15ZnISvv4hsWVbFiz1zyq-d8f8F4gmawQ">