xref: /llvm-project/clang/test/CodeGen/AArch64/fixed-register-global.c (revision a6b5e18fc6fa0e8d9bf10020e8f6070951630d42)
1afa2fbf8SIgor Kudrin /// Check that -ffixed register handled for globals.
2afa2fbf8SIgor Kudrin /// Regression test for #76426, #109778
3afa2fbf8SIgor Kudrin // REQUIRES: aarch64-registered-target
4afa2fbf8SIgor Kudrin 
5*a6b5e18fSJordan Rupprecht // RUN: %clang -c --target=aarch64-none-gnu -ffixed-x15 %s -o /dev/null 2>&1 | count 0
6afa2fbf8SIgor Kudrin 
7*a6b5e18fSJordan Rupprecht // RUN: not %clang -c --target=aarch64-none-gnu %s -o /dev/null 2>&1 | \
8afa2fbf8SIgor Kudrin // RUN:   FileCheck %s --check-prefix=ERR_INVREG
9afa2fbf8SIgor Kudrin // ERR_INVREG: error: register 'x15' unsuitable for global register variables on this target
10afa2fbf8SIgor Kudrin 
11*a6b5e18fSJordan Rupprecht // RUN: not %clang -c --target=aarch64-none-gnu -ffixed-x15 -DTYPE=short %s -o /dev/null 2>&1 | \
12afa2fbf8SIgor Kudrin // RUN:   FileCheck %s --check-prefix=ERR_SIZE
13afa2fbf8SIgor Kudrin // ERR_SIZE: error: size of register 'x15' does not match variable size
14afa2fbf8SIgor Kudrin 
15afa2fbf8SIgor Kudrin #ifndef TYPE
16afa2fbf8SIgor Kudrin #define TYPE long
17afa2fbf8SIgor Kudrin #endif
18afa2fbf8SIgor Kudrin 
19afa2fbf8SIgor Kudrin register TYPE x15 __asm__("x15");
20afa2fbf8SIgor Kudrin 
21afa2fbf8SIgor Kudrin TYPE foo() {
22afa2fbf8SIgor Kudrin   return x15;
23afa2fbf8SIgor Kudrin }
24