When setting a tied check if it's already tied. If it's tied to another constraint it's invalid. Fixes PR3905.
llvm-svn: 118146
This commit is contained in:
parent
da1f5fc881
commit
2d5f8b4201
|
@ -354,6 +354,11 @@ bool TargetInfo::validateInputConstraint(ConstraintInfo *OutputConstraints,
|
|||
if (OutputConstraints[i].isReadWrite())
|
||||
return false;
|
||||
|
||||
// If the constraint is already tied, it must be tied to the
|
||||
// same operand referenced to by the number.
|
||||
if (Info.hasTiedOperand() && Info.getTiedOperand() != i)
|
||||
return false;
|
||||
|
||||
// The constraint should have the same info as the respective
|
||||
// output constraint.
|
||||
Info.setTiedOperand(i, OutputConstraints[i]);
|
||||
|
@ -369,6 +374,11 @@ bool TargetInfo::validateInputConstraint(ConstraintInfo *OutputConstraints,
|
|||
if (!resolveSymbolicName(Name, OutputConstraints, NumOutputs, Index))
|
||||
return false;
|
||||
|
||||
// If the constraint is already tied, it must be tied to the
|
||||
// same operand referenced to by the number.
|
||||
if (Info.hasTiedOperand() && Info.getTiedOperand() != Index)
|
||||
return false;
|
||||
|
||||
Info.setTiedOperand(Index, OutputConstraints[Index]);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -81,7 +81,13 @@ int test7(unsigned long long b) {
|
|||
asm volatile (""); // expected-warning {{meaningless 'volatile' on asm outside function}}
|
||||
|
||||
// PR3904
|
||||
int test8(int i) {
|
||||
void test8(int i) {
|
||||
// A number in an input constraint can't point to a read-write constraint.
|
||||
asm ("" : "+r" (i), "=r"(i) : "0" (i)); // expected-error{{invalid input constraint '0' in asm}}
|
||||
asm("" : "+r" (i), "=r"(i) : "0" (i)); // expected-error{{invalid input constraint '0' in asm}}
|
||||
}
|
||||
|
||||
// PR3905
|
||||
void test9(int i) {
|
||||
asm("" : [foo] "=r" (i), "=r"(i) : "1[foo]"(i)); // expected-error{{invalid input constraint '1[foo]' in asm}}
|
||||
asm("" : [foo] "=r" (i), "=r"(i) : "[foo]1"(i)); // expected-error{{invalid input constraint '[foo]1' in asm}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue