| // REQUIRES: m68k-registered-target |
| // RUN: %clang_cc1 -triple m68k -fsyntax-only -verify %s -DINVALID |
| // RUN: %clang_cc1 -triple m68k -fsyntax-only -verify %s |
| |
| #ifdef INVALID |
| |
| // Invalid constraint usages that can be blocked by frontend |
| |
| void I() { |
| static const int BelowMin = 0; |
| static const int AboveMax = 9; |
| asm ("" :: "I"(BelowMin)); // expected-error{{value '0' out of range for constraint 'I'}} |
| asm ("" :: "I"(AboveMax)); // expected-error{{value '9' out of range for constraint 'I'}} |
| } |
| |
| void J() { |
| static const int BelowMin = -0x8001; |
| static const int AboveMax = 0x8000; |
| asm ("" :: "J"(BelowMin)); // expected-error{{value '-32769' out of range for constraint 'J'}} |
| asm ("" :: "J"(AboveMax)); // expected-error{{value '32768' out of range for constraint 'J'}} |
| } |
| |
| void L() { |
| static const int BelowMin = -9; |
| static const int AboveMax = 0; |
| asm ("" :: "L"(BelowMin)); // expected-error{{value '-9' out of range for constraint 'L'}} |
| asm ("" :: "L"(AboveMax)); // expected-error{{value '0' out of range for constraint 'L'}} |
| } |
| |
| void N() { |
| static const int BelowMin = 23; |
| static const int AboveMax = 32; |
| asm ("" :: "N"(BelowMin)); // expected-error{{value '23' out of range for constraint 'N'}} |
| asm ("" :: "N"(AboveMax)); // expected-error{{value '32' out of range for constraint 'N'}} |
| } |
| |
| void O() { |
| // Valid only if it's 16 |
| static const int IncorrectVal = 18; |
| asm ("" :: "O"(IncorrectVal)); // expected-error{{value '18' out of range for constraint 'O'}} |
| } |
| |
| void P() { |
| static const int BelowMin = 7; |
| static const int AboveMax = 16; |
| asm ("" :: "P"(BelowMin)); // expected-error{{value '7' out of range for constraint 'P'}} |
| asm ("" :: "P"(AboveMax)); // expected-error{{value '16' out of range for constraint 'P'}} |
| } |
| |
| void C0() { |
| // Valid only if it's 0 |
| static const int IncorrectVal = 1; |
| asm ("" :: "C0"(IncorrectVal)); // expected-error{{value '1' out of range for constraint 'C0'}} |
| } |
| |
| #else |
| // Valid constraint usages. |
| // Note that these constraints can not be fully validated by frontend. |
| // So we're only testing the availability of their letters here. |
| // expected-no-diagnostics |
| |
| void K() { |
| asm ("" :: "K"(0x80)); |
| } |
| |
| void M() { |
| asm ("" :: "M"(0x100)); |
| } |
| void Ci() { |
| asm ("" :: "Ci"(0)); |
| } |
| |
| void Cj() { |
| asm ("" :: "Cj"(0x8000)); |
| } |
| |
| // Register constraints |
| void a(int x) { |
| asm ("" :: "a"(x)); |
| } |
| |
| void d(int x) { |
| asm ("" :: "d"(x)); |
| } |
| #endif |
| |