Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1086)

Unified Diff: test/cctest/compiler/test-js-typed-lowering.cc

Issue 1092353002: [strong] Disallow implicit conversions for binary arithmetic operations (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase :( Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/cctest/compiler/test-js-typed-lowering.cc
diff --git a/test/cctest/compiler/test-js-typed-lowering.cc b/test/cctest/compiler/test-js-typed-lowering.cc
index cc4b2bdef255b7b35231183f186e9b9847336970..c3c3cc6c13952cd16166ce948507c633d30bc315 100644
--- a/test/cctest/compiler/test-js-typed-lowering.cc
+++ b/test/cctest/compiler/test-js-typed-lowering.cc
@@ -227,7 +227,7 @@ TEST(StringBinops) {
for (size_t j = 0; j < arraysize(kStringTypes); ++j) {
Node* p1 = R.Parameter(kStringTypes[j], 1);
- Node* add = R.Binop(R.javascript.Add(), p0, p1);
+ Node* add = R.Binop(R.javascript.Add(language_mode), p0, p1);
Node* r = R.reduce(add);
R.CheckPureBinop(IrOpcode::kStringAdd, r);
@@ -239,12 +239,12 @@ TEST(StringBinops) {
#endif
-TEST(AddNumber1) {
+TEST_WITH_STRONG(AddNumber1) {
JSTypedLoweringTester R;
for (size_t i = 0; i < arraysize(kNumberTypes); ++i) {
Node* p0 = R.Parameter(kNumberTypes[i], 0);
Node* p1 = R.Parameter(kNumberTypes[i], 1);
- Node* add = R.Binop(R.javascript.Add(), p0, p1);
+ Node* add = R.Binop(R.javascript.Add(language_mode), p0, p1);
Node* r = R.reduce(add);
R.CheckPureBinop(IrOpcode::kNumberAdd, r);
@@ -254,14 +254,14 @@ TEST(AddNumber1) {
}
-TEST(NumberBinops) {
+TEST_WITH_STRONG(NumberBinops) {
JSTypedLoweringTester R;
const Operator* ops[] = {
- R.javascript.Add(), R.simplified.NumberAdd(),
- R.javascript.Subtract(), R.simplified.NumberSubtract(),
- R.javascript.Multiply(), R.simplified.NumberMultiply(),
- R.javascript.Divide(), R.simplified.NumberDivide(),
- R.javascript.Modulus(), R.simplified.NumberModulus(),
+ R.javascript.Add(language_mode), R.simplified.NumberAdd(),
+ R.javascript.Subtract(language_mode), R.simplified.NumberSubtract(),
+ R.javascript.Multiply(language_mode), R.simplified.NumberMultiply(),
+ R.javascript.Divide(language_mode), R.simplified.NumberDivide(),
+ R.javascript.Modulus(language_mode), R.simplified.NumberModulus(),
};
for (size_t i = 0; i < arraysize(kNumberTypes); ++i) {
@@ -301,21 +301,22 @@ static void CheckToI32(Node* old_input, Node* new_input, bool is_signed) {
// A helper class for testing lowering of bitwise shift operators.
class JSBitwiseShiftTypedLoweringTester : public JSTypedLoweringTester {
public:
- static const int kNumberOps = 6;
- const Operator* ops[kNumberOps];
- bool signedness[kNumberOps];
-
- JSBitwiseShiftTypedLoweringTester() {
+ explicit JSBitwiseShiftTypedLoweringTester(LanguageMode language_mode)
+ : JSTypedLoweringTester(), language_mode_(language_mode) {
int i = 0;
- set(i++, javascript.ShiftLeft(), true);
+ set(i++, javascript.ShiftLeft(language_mode_), true);
set(i++, machine.Word32Shl(), false);
- set(i++, javascript.ShiftRight(), true);
+ set(i++, javascript.ShiftRight(language_mode_), true);
set(i++, machine.Word32Sar(), false);
- set(i++, javascript.ShiftRightLogical(), false);
+ set(i++, javascript.ShiftRightLogical(language_mode_), false);
set(i++, machine.Word32Shr(), false);
}
+ static const int kNumberOps = 6;
+ const Operator* ops[kNumberOps];
+ bool signedness[kNumberOps];
private:
+ LanguageMode language_mode_;
void set(int idx, const Operator* op, bool s) {
ops[idx] = op;
signedness[idx] = s;
@@ -324,7 +325,7 @@ class JSBitwiseShiftTypedLoweringTester : public JSTypedLoweringTester {
TEST(Int32BitwiseShifts) {
- JSBitwiseShiftTypedLoweringTester R;
+ JSBitwiseShiftTypedLoweringTester R(LanguageMode::SLOPPY);
Type* types[] = {
Type::SignedSmall(), Type::UnsignedSmall(), Type::Negative32(),
@@ -365,21 +366,22 @@ TEST(Int32BitwiseShifts) {
// A helper class for testing lowering of bitwise operators.
class JSBitwiseTypedLoweringTester : public JSTypedLoweringTester {
public:
- static const int kNumberOps = 6;
- const Operator* ops[kNumberOps];
- bool signedness[kNumberOps];
-
- JSBitwiseTypedLoweringTester() {
+ explicit JSBitwiseTypedLoweringTester(LanguageMode language_mode)
+ : JSTypedLoweringTester(), language_mode_(language_mode) {
int i = 0;
- set(i++, javascript.BitwiseOr(), true);
+ set(i++, javascript.BitwiseOr(language_mode_), true);
set(i++, machine.Word32Or(), true);
- set(i++, javascript.BitwiseXor(), true);
+ set(i++, javascript.BitwiseXor(language_mode_), true);
set(i++, machine.Word32Xor(), true);
- set(i++, javascript.BitwiseAnd(), true);
+ set(i++, javascript.BitwiseAnd(language_mode_), true);
set(i++, machine.Word32And(), true);
}
+ static const int kNumberOps = 6;
+ const Operator* ops[kNumberOps];
+ bool signedness[kNumberOps];
private:
+ LanguageMode language_mode_;
void set(int idx, const Operator* op, bool s) {
ops[idx] = op;
signedness[idx] = s;
@@ -388,7 +390,7 @@ class JSBitwiseTypedLoweringTester : public JSTypedLoweringTester {
TEST(Int32BitwiseBinops) {
- JSBitwiseTypedLoweringTester R;
+ JSBitwiseTypedLoweringTester R(LanguageMode::SLOPPY);
Type* types[] = {
Type::SignedSmall(), Type::UnsignedSmall(), Type::Unsigned32(),
@@ -579,14 +581,16 @@ TEST(JSToString_replacement) {
}
-TEST(StringComparison) {
+TEST_WITH_STRONG(StringComparison) {
JSTypedLoweringTester R;
const Operator* ops[] = {
- R.javascript.LessThan(), R.simplified.StringLessThan(),
- R.javascript.LessThanOrEqual(), R.simplified.StringLessThanOrEqual(),
- R.javascript.GreaterThan(), R.simplified.StringLessThan(),
- R.javascript.GreaterThanOrEqual(), R.simplified.StringLessThanOrEqual()};
+ R.javascript.LessThan(language_mode), R.simplified.StringLessThan(),
+ R.javascript.LessThanOrEqual(language_mode),
+ R.simplified.StringLessThanOrEqual(),
+ R.javascript.GreaterThan(language_mode), R.simplified.StringLessThan(),
+ R.javascript.GreaterThanOrEqual(language_mode),
+ R.simplified.StringLessThanOrEqual()};
for (size_t i = 0; i < arraysize(kStringTypes); i++) {
Node* p0 = R.Parameter(kStringTypes[i], 0);
@@ -627,14 +631,16 @@ static void CheckIsConvertedToNumber(Node* val, Node* converted) {
}
-TEST(NumberComparison) {
+TEST_WITH_STRONG(NumberComparison) {
JSTypedLoweringTester R;
const Operator* ops[] = {
- R.javascript.LessThan(), R.simplified.NumberLessThan(),
- R.javascript.LessThanOrEqual(), R.simplified.NumberLessThanOrEqual(),
- R.javascript.GreaterThan(), R.simplified.NumberLessThan(),
- R.javascript.GreaterThanOrEqual(), R.simplified.NumberLessThanOrEqual()};
+ R.javascript.LessThan(language_mode), R.simplified.NumberLessThan(),
+ R.javascript.LessThanOrEqual(language_mode),
+ R.simplified.NumberLessThanOrEqual(),
+ R.javascript.GreaterThan(language_mode), R.simplified.NumberLessThan(),
+ R.javascript.GreaterThanOrEqual(language_mode),
+ R.simplified.NumberLessThanOrEqual()};
Node* const p0 = R.Parameter(Type::Number(), 0);
Node* const p1 = R.Parameter(Type::Number(), 1);
@@ -657,7 +663,7 @@ TEST(NumberComparison) {
}
-TEST(MixedComparison1) {
+TEST_WITH_STRONG(MixedComparison1) {
JSTypedLoweringTester R;
Type* types[] = {Type::Number(), Type::String(),
@@ -669,7 +675,7 @@ TEST(MixedComparison1) {
for (size_t j = 0; j < arraysize(types); j++) {
Node* p1 = R.Parameter(types[j], 1);
{
- Node* cmp = R.Binop(R.javascript.LessThan(), p0, p1);
+ Node* cmp = R.Binop(R.javascript.LessThan(language_mode), p0, p1);
Node* r = R.reduce(cmp);
if (!types[i]->Maybe(Type::String()) ||
@@ -688,7 +694,7 @@ TEST(MixedComparison1) {
}
-TEST(RemoveToNumberEffects) {
+TEST_WITH_STRONG(RemoveToNumberEffects) {
FLAG_turbo_deoptimization = true;
JSTypedLoweringTester R;
@@ -727,12 +733,14 @@ TEST(RemoveToNumberEffects) {
case 2:
effect_use = R.graph.NewNode(R.common.EffectPhi(1), ton, R.start());
case 3:
- effect_use = R.graph.NewNode(R.javascript.Add(), ton, ton, R.context(),
- frame_state, frame_state, ton, R.start());
+ effect_use = R.graph.NewNode(R.javascript.Add(language_mode), ton, ton,
+ R.context(), frame_state, frame_state, ton,
+ R.start());
break;
case 4:
- effect_use = R.graph.NewNode(R.javascript.Add(), p0, p0, R.context(),
- frame_state, frame_state, ton, R.start());
+ effect_use = R.graph.NewNode(R.javascript.Add(language_mode), p0, p0,
+ R.context(), frame_state, frame_state, ton,
+ R.start());
break;
case 5:
effect_use = R.graph.NewNode(R.common.Return(), p0, ton, R.start());
@@ -890,18 +898,19 @@ TEST(StringEquality) {
}
-TEST(RemovePureNumberBinopEffects) {
+TEST_WITH_STRONG(RemovePureNumberBinopEffects) {
JSTypedLoweringTester R;
const Operator* ops[] = {
R.javascript.Equal(), R.simplified.NumberEqual(),
- R.javascript.Add(), R.simplified.NumberAdd(),
- R.javascript.Subtract(), R.simplified.NumberSubtract(),
- R.javascript.Multiply(), R.simplified.NumberMultiply(),
- R.javascript.Divide(), R.simplified.NumberDivide(),
- R.javascript.Modulus(), R.simplified.NumberModulus(),
- R.javascript.LessThan(), R.simplified.NumberLessThan(),
- R.javascript.LessThanOrEqual(), R.simplified.NumberLessThanOrEqual(),
+ R.javascript.Add(language_mode), R.simplified.NumberAdd(),
+ R.javascript.Subtract(language_mode), R.simplified.NumberSubtract(),
+ R.javascript.Multiply(language_mode), R.simplified.NumberMultiply(),
+ R.javascript.Divide(language_mode), R.simplified.NumberDivide(),
+ R.javascript.Modulus(language_mode), R.simplified.NumberModulus(),
+ R.javascript.LessThan(language_mode), R.simplified.NumberLessThan(),
+ R.javascript.LessThanOrEqual(language_mode),
+ R.simplified.NumberLessThanOrEqual(),
};
for (size_t j = 0; j < arraysize(ops); j += 2) {
@@ -922,10 +931,14 @@ TEST(OrderNumberBinopEffects1) {
JSTypedLoweringTester R;
const Operator* ops[] = {
- R.javascript.Subtract(), R.simplified.NumberSubtract(),
- R.javascript.Multiply(), R.simplified.NumberMultiply(),
- R.javascript.Divide(), R.simplified.NumberDivide(),
- R.javascript.Modulus(), R.simplified.NumberModulus(),
+ R.javascript.Subtract(LanguageMode::SLOPPY),
+ R.simplified.NumberSubtract(),
+ R.javascript.Multiply(LanguageMode::SLOPPY),
+ R.simplified.NumberMultiply(),
+ R.javascript.Divide(LanguageMode::SLOPPY),
+ R.simplified.NumberDivide(),
+ R.javascript.Modulus(LanguageMode::SLOPPY),
+ R.simplified.NumberModulus(),
};
for (size_t j = 0; j < arraysize(ops); j += 2) {
@@ -948,11 +961,16 @@ TEST(OrderNumberBinopEffects2) {
JSTypedLoweringTester R;
const Operator* ops[] = {
- R.javascript.Add(), R.simplified.NumberAdd(),
- R.javascript.Subtract(), R.simplified.NumberSubtract(),
- R.javascript.Multiply(), R.simplified.NumberMultiply(),
- R.javascript.Divide(), R.simplified.NumberDivide(),
- R.javascript.Modulus(), R.simplified.NumberModulus(),
+ R.javascript.Add(LanguageMode::SLOPPY),
+ R.simplified.NumberAdd(),
+ R.javascript.Subtract(LanguageMode::SLOPPY),
+ R.simplified.NumberSubtract(),
+ R.javascript.Multiply(LanguageMode::SLOPPY),
+ R.simplified.NumberMultiply(),
+ R.javascript.Divide(LanguageMode::SLOPPY),
+ R.simplified.NumberDivide(),
+ R.javascript.Modulus(LanguageMode::SLOPPY),
+ R.simplified.NumberModulus(),
};
for (size_t j = 0; j < arraysize(ops); j += 2) {
@@ -987,8 +1005,10 @@ TEST(OrderCompareEffects) {
JSTypedLoweringTester R;
const Operator* ops[] = {
- R.javascript.GreaterThan(), R.simplified.NumberLessThan(),
- R.javascript.GreaterThanOrEqual(), R.simplified.NumberLessThanOrEqual(),
+ R.javascript.GreaterThan(LanguageMode::SLOPPY),
+ R.simplified.NumberLessThan(),
+ R.javascript.GreaterThanOrEqual(LanguageMode::SLOPPY),
+ R.simplified.NumberLessThanOrEqual(),
};
for (size_t j = 0; j < arraysize(ops); j += 2) {
@@ -1035,11 +1055,11 @@ TEST(OrderCompareEffects) {
TEST(Int32BinopEffects) {
- JSBitwiseTypedLoweringTester R;
-
+ JSBitwiseTypedLoweringTester R(LanguageMode::SLOPPY);
for (int j = 0; j < R.kNumberOps; j += 2) {
bool signed_left = R.signedness[j], signed_right = R.signedness[j + 1];
BinopEffectsTester B(R.ops[j], I32Type(signed_left), I32Type(signed_right));
+ printf("%s\n%s\n", R.ops[j + 1]->mnemonic(), B.result->op()->mnemonic());
rossberg 2015/04/23 13:29:37 Stray debug output?
conradw 2015/04/23 14:51:55 Oops, done.
CHECK_EQ(R.ops[j + 1]->opcode(), B.result->op()->opcode());
B.R.CheckPureBinop(B.result->opcode(), B.result);
@@ -1117,9 +1137,9 @@ TEST(Int32BinopEffects) {
}
-TEST(Int32AddNarrowing) {
+TEST_WITH_STRONG(Int32AddNarrowing) {
{
- JSBitwiseTypedLoweringTester R;
+ JSBitwiseTypedLoweringTester R(language_mode);
for (int o = 0; o < R.kNumberOps; o += 2) {
for (size_t i = 0; i < arraysize(kInt32Types); i++) {
@@ -1142,7 +1162,7 @@ TEST(Int32AddNarrowing) {
}
}
{
- JSBitwiseShiftTypedLoweringTester R;
+ JSBitwiseShiftTypedLoweringTester R(language_mode);
for (int o = 0; o < R.kNumberOps; o += 2) {
for (size_t i = 0; i < arraysize(kInt32Types); i++) {
@@ -1165,7 +1185,7 @@ TEST(Int32AddNarrowing) {
}
}
{
- JSBitwiseTypedLoweringTester R;
+ JSBitwiseTypedLoweringTester R(language_mode);
for (int o = 0; o < R.kNumberOps; o += 2) {
Node* n0 = R.Parameter(I32Type(R.signedness[o]));
@@ -1189,7 +1209,7 @@ TEST(Int32AddNarrowing) {
}
-TEST(Int32Comparisons) {
+TEST_WITH_STRONG(Int32Comparisons) {
JSTypedLoweringTester R;
struct Entry {
@@ -1201,16 +1221,17 @@ TEST(Int32Comparisons) {
};
Entry ops[] = {
- {R.javascript.LessThan(), R.machine.Uint32LessThan(),
+ {R.javascript.LessThan(language_mode), R.machine.Uint32LessThan(),
R.machine.Int32LessThan(), R.simplified.NumberLessThan(), false},
- {R.javascript.LessThanOrEqual(), R.machine.Uint32LessThanOrEqual(),
- R.machine.Int32LessThanOrEqual(), R.simplified.NumberLessThanOrEqual(),
- false},
- {R.javascript.GreaterThan(), R.machine.Uint32LessThan(),
+ {R.javascript.LessThanOrEqual(language_mode),
+ R.machine.Uint32LessThanOrEqual(), R.machine.Int32LessThanOrEqual(),
+ R.simplified.NumberLessThanOrEqual(), false},
+ {R.javascript.GreaterThan(language_mode), R.machine.Uint32LessThan(),
R.machine.Int32LessThan(), R.simplified.NumberLessThan(), true},
- {R.javascript.GreaterThanOrEqual(), R.machine.Uint32LessThanOrEqual(),
- R.machine.Int32LessThanOrEqual(), R.simplified.NumberLessThanOrEqual(),
- true}};
+ {R.javascript.GreaterThanOrEqual(language_mode),
+ R.machine.Uint32LessThanOrEqual(), R.machine.Int32LessThanOrEqual(),
+ R.simplified.NumberLessThanOrEqual(), true}
+ };
for (size_t o = 0; o < arraysize(ops); o++) {
for (size_t i = 0; i < arraysize(kNumberTypes); i++) {

Powered by Google App Engine
This is Rietveld 408576698