forked from OSchip/llvm-project
When reporting constraints that should be constant, the type doesn't
really help. Improve diagnostics. llvm-svn: 226863
This commit is contained in:
parent
19b538450c
commit
a43872ccdd
|
@ -6173,6 +6173,8 @@ let CategoryName = "Inline Assembly Issue" in {
|
|||
"invalid lvalue in asm input for constraint '%0'">;
|
||||
def err_asm_invalid_input_constraint : Error<
|
||||
"invalid input constraint '%0' in asm">;
|
||||
def err_asm_immediate_expected : Error<"constraint '%0' expects "
|
||||
"an integer constant expression">;
|
||||
def err_asm_invalid_type_in_input : Error<
|
||||
"invalid type %0 in asm input for constraint '%1'">;
|
||||
def err_asm_tying_incompatible_types : Error<
|
||||
|
|
|
@ -230,9 +230,8 @@ StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple,
|
|||
llvm::APSInt Result;
|
||||
if (!InputExpr->EvaluateAsInt(Result, Context))
|
||||
return StmtError(
|
||||
Diag(InputExpr->getLocStart(), diag::err_asm_invalid_type_in_input)
|
||||
<< InputExpr->getType() << Info.getConstraintStr()
|
||||
<< InputExpr->getSourceRange());
|
||||
Diag(InputExpr->getLocStart(), diag::err_asm_immediate_expected)
|
||||
<< Info.getConstraintStr() << InputExpr->getSourceRange());
|
||||
if (Result.slt(Info.getImmConstantMin()) ||
|
||||
Result.sgt(Info.getImmConstantMax()))
|
||||
return StmtError(Diag(InputExpr->getLocStart(),
|
||||
|
|
|
@ -6,7 +6,7 @@ void I(int i, int j) {
|
|||
static const int AboveMax = 32;
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "I"(j)); // expected-error{{invalid type 'int' in asm input for constraint 'I'}}
|
||||
: "0"(i), "I"(j)); // expected-error{{constraint 'I' expects an integer constant expression}}
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "I"(BelowMin)); // expected-error{{value '-1' out of range for constraint 'I'}}
|
||||
|
@ -23,7 +23,7 @@ void J(int i, int j) {
|
|||
static const int AboveMax = 64;
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "J"(j)); // expected-error{{invalid type 'int' in asm input for constraint 'J'}}
|
||||
: "0"(i), "J"(j)); // expected-error{{constraint 'J' expects an integer constant expression}}
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "J"(BelowMin)); // expected-error{{value '-1' out of range for constraint 'J'}}
|
||||
|
@ -40,7 +40,7 @@ void K(int i, int j) {
|
|||
static const int AboveMax = 128;
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "K"(j)); // expected-error{{invalid type 'int' in asm input for constraint 'K'}}
|
||||
: "0"(i), "K"(j)); // expected-error{{constraint 'K' expects an integer constant expression}}
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "K"(BelowMin)); // expected-error{{value '-129' out of range for constraint 'K'}}
|
||||
|
@ -57,7 +57,7 @@ void M(int i, int j) {
|
|||
static const int AboveMax = 4;
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "M"(j)); // expected-error{{invalid type 'int' in asm input for constraint 'M'}}
|
||||
: "0"(i), "M"(j)); // expected-error{{constraint 'M' expects an integer constant expression}}
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "M"(BelowMin)); // expected-error{{value '-1' out of range for constraint 'M'}}
|
||||
|
@ -74,7 +74,7 @@ void N(int i, int j) {
|
|||
static const int AboveMax = 256;
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "N"(j)); // expected-error{{invalid type 'int' in asm input for constraint 'N'}}
|
||||
: "0"(i), "N"(j)); // expected-error{{constraint 'N' expects an integer constant expression}}
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "N"(BelowMin)); // expected-error{{value '-1' out of range for constraint 'N'}}
|
||||
|
@ -91,7 +91,7 @@ void O(int i, int j) {
|
|||
static const int AboveMax = 128;
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "O"(j)); // expected-error{{invalid type 'int' in asm input for constraint 'O'}}
|
||||
: "0"(i), "O"(j)); // expected-error{{constraint 'O' expects an integer constant expression}}
|
||||
__asm__("xorl %0,%2"
|
||||
: "=r"(i)
|
||||
: "0"(i), "O"(BelowMin)); // expected-error{{value '-1' out of range for constraint 'O'}}
|
||||
|
|
Loading…
Reference in New Issue