blob: c1872a1d13ec09bb3b4932dd87245c36e35f9011 [file] [edit]
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu %s -DX64_NORESERVE -verify=common,x64_noreserve -fsyntax-only
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu %s -DX64_RESERVE -target-feature +reserve-r11 -verify=common,x64_reserve -fsyntax-only
// RUN: %clang_cc1 -triple i386-unknown-linux-gnu %s -DX86_NORESERVE -verify=common,x86_noreserve -fsyntax-only
// RUN: %clang_cc1 -triple i386-unknown-linux-gnu %s -DX86_RESERVE -target-feature +reserve-edi -verify=common,x86_reserve -fsyntax-only
#if defined(X64_NORESERVE) || defined(X64_RESERVE)
register long long x64_rsp_ok __asm__("rsp");
register int x64_rsp_bad_size __asm__("rsp"); // common-error {{size of register 'rsp' does not match variable size}}
register long long x64_rbp_ok __asm__("rbp");
#endif
#ifdef X64_NORESERVE
register long long x64_r11_noreserve __asm__("r11"); // x64_noreserve-error {{register 'r11' unsuitable for global register variables on this target}}
#endif
#ifdef X64_RESERVE
register long long x64_r11_ok __asm__("r11");
register int x64_r11d_ok __asm__("r11d");
register short x64_r11w_ok __asm__("r11w");
register char x64_r11b_ok __asm__("r11b");
#endif
#if defined(X86_NORESERVE) || defined(X86_RESERVE)
register int x86_esp_ok __asm__("esp");
register long long x86_esp_bad_size __asm__("esp"); // common-error {{size of register 'esp' does not match variable size}}
register int x86_ebp_ok __asm__("ebp");
#endif
#ifdef X86_NORESERVE
register int x86_edi_noreserve __asm__("edi"); // x86_noreserve-error {{register 'edi' unsuitable for global register variables on this target}}
#endif
#ifdef X86_RESERVE
register int x86_edi_ok __asm__("edi");
register char x86_edi_bad_size __asm__("edi"); // x86_reserve-error {{size of register 'edi' does not match variable size}}
#endif