xref: /PHP-8.2/ext/ffi/tests/gh10403.phpt (revision 560ca9c7)
1--TEST--
2GH-10403: Fix incorrect bitshifting and masking in ffi bitfield
3--EXTENSIONS--
4ffi
5--SKIPIF--
6<?php if (PHP_INT_SIZE != 8) echo "skip this test is for 64-bit only"; ?>
7--FILE--
8<?php
9$ffi = FFI::cdef(<<<EOF
10    struct MyStruct {
11        uint64_t x : 10;
12        uint64_t y : 54;
13    };
14EOF);
15
16$test_struct = $ffi->new('struct MyStruct');
17$test_struct->x = 1023;
18$test_values = [0x3fafbfcfdfefff, 0x01020304050607, 0, 0x3fffffffffffff, 0x2ffffffffffff5];
19foreach ($test_values as $test_value) {
20    $test_struct->y = $test_value;
21    var_dump($test_struct->y === $test_value);
22}
23var_dump($test_struct->x);
24--EXPECT--
25bool(true)
26bool(true)
27bool(true)
28bool(true)
29bool(true)
30int(1023)
31