(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tree-ssa/
pr101941-1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fconserve-stack -fdump-tree-optimized" } */
       3  /* Check to make sure that if
       4     rfc4106_set_hash_subkey gets split,
       5     the error function does not gets split away
       6     from the if statement conditionalizing it.
       7     Checking this via the scan tree also. */
       8  struct crypto_aes_ctx {
       9    char key_dec[128];
      10  };
      11  
      12  int rfc4106_set_hash_subkey_hash_subkey;
      13  
      14  void __write_overflow(void)__attribute__((__error__("")));
      15  void __write_overflow1(void);
      16  void aes_encrypt(void*);
      17  
      18  void fortify_panic(const char*) __attribute__((__noreturn__)) ;
      19  
      20  char *rfc4106_set_hash_subkey(struct crypto_aes_ctx *ctx) {
      21    void *a = &ctx->key_dec[0];
      22    unsigned p_size =  __builtin_object_size(a, 0);
      23  #ifdef __OPTIMIZE__
      24    if (p_size < 16) {
      25      __write_overflow1();
      26      fortify_panic(__func__);
      27    }
      28    if (p_size < 32) {
      29      __write_overflow();
      30      fortify_panic(__func__);
      31    }
      32  #endif
      33    aes_encrypt(ctx);
      34    return ctx->key_dec;
      35  }
      36  
      37  char *(*gg)(struct crypto_aes_ctx *) = rfc4106_set_hash_subkey;
      38  
      39  void a(void)
      40  {
      41    struct crypto_aes_ctx ctx;
      42    rfc4106_set_hash_subkey(&ctx);
      43  }
      44  void b(void)
      45  {
      46    struct crypto_aes_ctx ctx;
      47    ctx.key_dec[0] = 0;
      48    rfc4106_set_hash_subkey(&ctx);
      49  }
      50  
      51  /* This testcase should still split out one of the above basic blocks dealing
      52     with __write_overflow. */
      53  /* { dg-final { scan-tree-dump-times "Function rfc4106_set_hash_subkey.part" 1 "optimized" } } */