| /* { dg-do compile } */ | |
| /* { dg-options "-fstack-protector-all -O2" } */ | |
| void __attribute__ ((noipa)) | |
| f (void) | |
| { | |
| volatile int x; | |
| asm volatile ("" ::: | |
| "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", | |
| "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", | |
| "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23", | |
| "x24", "x25", "x26", "x27", "x28", "x30"); | |
| } | |
| /* The register clobbers above should not generate any single LDRs or STRs; | |
| all registers should be saved and restored in pairs. The only STRs | |
| should be therefore be those associated with the stack protector | |
| tests themselves. | |
| Make sure the address of the canary value is not spilled and reloaded, | |
| since that would give the attacker an opportunity to change the | |
| canary value. */ | |
| /* { dg-final { scan-assembler-times {\tstr\t} 1 } } */ |