diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2018-03-28 15:16:15 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-03-29 13:41:25 +0000 |
commit | 23463004dfbcaf8e0bbf28d405c69b45bca8d9c8 (patch) | |
tree | 37df09ba2e1e22e6c5514e8b1bf24857ad581fbf | |
parent | 0090ef6a837f339ecc8b1d5e1e50697fbcd2e76a (diff) |
fixed type mismatches in SkSL comparison operators
Bug: skia:
Change-Id: I8f05088c561a80549264f7a65cb8161bbe7d8f4c
Reviewed-on: https://skia-review.googlesource.com/116982
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
-rw-r--r-- | src/sksl/SkSLIRGenerator.cpp | 11 | ||||
-rw-r--r-- | tests/SkSLErrorTest.cpp | 6 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/sksl/SkSLIRGenerator.cpp b/src/sksl/SkSLIRGenerator.cpp index 815ec152cd..56d8e5e952 100644 --- a/src/sksl/SkSLIRGenerator.cpp +++ b/src/sksl/SkSLIRGenerator.cpp @@ -1092,15 +1092,18 @@ static bool determine_binary_type(const Context& context, return right.canCoerceTo(left); case Token::EQEQ: // fall through case Token::NEQ: - if (left == right) { + if (right.canCoerceTo(left)) { *outLeftType = &left; + *outRightType = &left; + *outResultType = context.fBool_Type.get(); + return true; + } if (left.canCoerceTo(right)) { + *outLeftType = &right; *outRightType = &right; *outResultType = context.fBool_Type.get(); return true; } - isLogical = true; - validMatrixOrVectorOp = true; - break; + return false; case Token::LT: // fall through case Token::GT: // fall through case Token::LTEQ: // fall through diff --git a/tests/SkSLErrorTest.cpp b/tests/SkSLErrorTest.cpp index 9c43ac5197..c24a25d832 100644 --- a/tests/SkSLErrorTest.cpp +++ b/tests/SkSLErrorTest.cpp @@ -245,6 +245,12 @@ DEF_TEST(SkSLBinaryTypeMismatch, r) { test_failure(r, "void main() { bool x = 1 || 2.0; }", "error: 1: type mismatch: '||' cannot operate on 'int', 'float'\n1 error\n"); + test_failure(r, + "void main() { bool x = float2(0) == 0; }", + "error: 1: type mismatch: '==' cannot operate on 'float2', 'int'\n1 error\n"); + test_failure(r, + "void main() { bool x = float2(0) != 0; }", + "error: 1: type mismatch: '!=' cannot operate on 'float2', 'int'\n1 error\n"); } DEF_TEST(SkSLCallNonFunction, r) { |