summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@debian.org>2019-09-06 11:42:47 +0100
committerSimon McVittie <smcv@debian.org>2020-03-10 11:09:05 +0000
commit9ffbe1e0a6aebb1f7ca989c59bf70e7e8bd6981d (patch)
tree851b9e7389b57308ec71045da9cf10d0ad9d5424
parent95342464a8912861f43f9aa3addf4f48a0518d8c (diff)
downloadcogl-9ffbe1e0a6aebb1f7ca989c59bf70e7e8bd6981d.tar.gz
tests: Force defined behaviour for 24-bit left-shifts
When r is 128 or more, running tests compiled with the undefined behaviour sanitizer (ubsan) reports: test-utils.c:312:45: runtime error: left shift of 128 by 24 places cannot be represented in type 'int' which indeed it cannot. Force the type to be unsigned 32-bit so that we get defined behaviour. Similarly, in test-atlas-migration, the left-shifted guint8 is promoted to int, which again does not have enough non-sign bits available to left-shift a value >= 128 by 24 bits. Again, force the shift to be done in unsigned 32-bit space. Signed-off-by: Simon McVittie <smcv@debian.org>
-rw-r--r--test-fixtures/test-utils.c12
-rw-r--r--tests/conform/test-atlas-migration.c6
2 files changed, 14 insertions, 4 deletions
diff --git a/test-fixtures/test-utils.c b/test-fixtures/test-utils.c
index 59e3fd8c..a08fda0e 100644
--- a/test-fixtures/test-utils.c
+++ b/test-fixtures/test-utils.c
@@ -298,7 +298,17 @@ void
test_utils_check_pixel_rgb (CoglFramebuffer *test_fb,
int x, int y, int r, int g, int b)
{
- test_utils_check_pixel (test_fb, x, y, (r << 24) | (g << 16) | (b << 8));
+ g_return_if_fail (r >= 0);
+ g_return_if_fail (g >= 0);
+ g_return_if_fail (b >= 0);
+ g_return_if_fail (r <= 0xFF);
+ g_return_if_fail (g <= 0xFF);
+ g_return_if_fail (b <= 0xFF);
+
+ test_utils_check_pixel (test_fb, x, y,
+ (((guint32) r) << 24) |
+ (((guint32) g) << 16) |
+ (((guint32) b) << 8));
}
void
diff --git a/tests/conform/test-atlas-migration.c b/tests/conform/test-atlas-migration.c
index 39e8a3c1..60502760 100644
--- a/tests/conform/test-atlas-migration.c
+++ b/tests/conform/test-atlas-migration.c
@@ -98,9 +98,9 @@ verify_texture (CoglTexture *texture, int size)
};
test_utils_compare_pixel (p,
- (real_color.red << 24) |
- (real_color.green << 16) |
- (real_color.blue << 8) |
+ (((guint32) real_color.red) << 24) |
+ (((guint32) real_color.green) << 16) |
+ (((guint32) real_color.blue) << 8) |
opacity);
g_assert_cmpint (p[3], ==, opacity);