| /* { dg-additional-options "-fconserve-stack" } */ |
| |
| /* Check to make sure that if |
| rfc4106_set_hash_subkey gets split, |
| the error function does not gets split away |
| from the if statement conditionalizing it. */ |
| |
| struct crypto_aes_ctx { |
| char key_dec[128]; |
| }; |
| |
| int rfc4106_set_hash_subkey_hash_subkey; |
| |
| void __write_overflow(void)__attribute__((__error__(""))); |
| void __write_overflow1(void); |
| void aes_encrypt(void*); |
| |
| void fortify_panic(const char*) __attribute__((__noreturn__)) ; |
| |
| char *rfc4106_set_hash_subkey(struct crypto_aes_ctx *ctx) { |
| void *a = &ctx->key_dec[0]; |
| unsigned p_size = __builtin_object_size(a, 0); |
| #ifdef __OPTIMIZE__ |
| if (p_size < 16) { |
| __write_overflow1(); |
| fortify_panic(__func__); |
| } |
| if (p_size < 32) { |
| __write_overflow(); |
| fortify_panic(__func__); |
| } |
| #endif |
| aes_encrypt(ctx); |
| return ctx->key_dec; |
| } |
| |
| char *(*gg)(struct crypto_aes_ctx *) = rfc4106_set_hash_subkey; |
| |
| void a(void) |
| { |
| struct crypto_aes_ctx ctx; |
| rfc4106_set_hash_subkey(&ctx); |
| } |
| void b(void) |
| { |
| struct crypto_aes_ctx ctx; |
| ctx.key_dec[0] = 0; |
| rfc4106_set_hash_subkey(&ctx); |
| } |
| |