aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2016-03-08 09:02:24 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-03-08 09:02:24 -0800
commitaa5e1ae06b33841ad4efc9fbf4c8b2cd6236d58b (patch)
tree120d5f537f58937c0305eb2d5a807f28b841ae93 /src/core
parentc41fd9251dad3e2e2797436a4ccfaf0490914fe0 (diff)
work around leftshift for negative values
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkEdge.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/core/SkEdge.cpp b/src/core/SkEdge.cpp
index c64896f2e0..94b7870b03 100644
--- a/src/core/SkEdge.cpp
+++ b/src/core/SkEdge.cpp
@@ -326,8 +326,9 @@ static inline int SkFDot6UpShift(SkFDot6 x, int upShift) {
*/
static SkFDot6 cubic_delta_from_line(SkFDot6 a, SkFDot6 b, SkFDot6 c, SkFDot6 d)
{
- SkFDot6 oneThird = ((a << 3) - ((b << 4) - b) + 6*c + d) * 19 >> 9;
- SkFDot6 twoThird = (a + 6*b - ((c << 4) - c) + (d << 3)) * 19 >> 9;
+ // since our parameters may be negative, we don't use << to avoid ASAN warnings
+ SkFDot6 oneThird = (a*8 - b*15 + 6*c + d) * 19 >> 9;
+ SkFDot6 twoThird = (a + 6*b - c*15 + d*8) * 19 >> 9;
return SkMax32(SkAbs32(oneThird), SkAbs32(twoThird));
}