Revert "Revert "[SIL] Add tests for 'undef' values & code fixes""

This reverts commit 0ead929b12.
This commit is contained in:
Max Moiseev
2016-03-10 10:54:50 -08:00
parent 677552f790
commit 5d6b47be74
2 changed files with 377 additions and 20 deletions

View File

@@ -2546,15 +2546,18 @@ public:
SILValue casevalue;
SILValue result;
std::tie(casevalue, result) = I->getCase(i);
auto *il = dyn_cast<IntegerLiteralInst>(casevalue);
require(il,
"select_value case operands should refer to integer literals");
APInt elt = il->getValue();
if (!isa<SILUndef>(casevalue)) {
auto *il = dyn_cast<IntegerLiteralInst>(casevalue);
require(il,
"select_value case operands should refer to integer literals");
APInt elt = il->getValue();
require(!seenCaseValues.count(elt),
"select_value dispatches on same case value more than once");
require(!seenCaseValues.count(elt),
"select_value dispatches on same case value more than once");
seenCaseValues.insert(elt);
seenCaseValues.insert(elt);
}
requireSameType(I->getOperand()->getType(), casevalue->getType(),
"select_value case value must match type of operand");