pvr: Force compile error on GNU void pointer arithmetic
authorMatt Coster <matt.coster@imgtec.com>
Wed, 20 Sep 2023 15:00:19 +0000 (16:00 +0100)
committerMarge Bot <emma+marge@anholt.net>
Wed, 27 Sep 2023 15:25:32 +0000 (15:25 +0000)
This GNU extension caused a bug where a void pointer was modified then
interpreted as uint32_t* (instead of the other way round). Force a
compile error to (hopefully) prevent this from happening again.

Signed-off-by: Matt Coster <matt.coster@imgtec.com>
Reviewed-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25327>

src/imagination/common/meson.build
src/imagination/meson.build
src/imagination/rogue/meson.build
src/imagination/rogue/tools/meson.build
src/imagination/vulkan/meson.build
src/imagination/vulkan/pds/meson.build

index 9660954..023dd94 100644 (file)
@@ -34,6 +34,6 @@ libpowervr_common = static_library(
     inc_src,
     inc_imagination,
   ],
-  c_args : [no_override_init_args],
+  c_args : [imagination_c_args, no_override_init_args],
   gnu_symbol_visibility : 'hidden',
 )
index 626a03a..0bb2401 100644 (file)
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 # SOFTWARE.
 
+imagination_c_args = cc.get_supported_arguments(
+  '-Werror=pointer-arith',
+)
+
 inc_imagination = include_directories([
   '.',
   'common',
index d7b06bb..120de6b 100644 (file)
@@ -63,7 +63,7 @@ libpowervr_rogue = shared_library(
     inc_include,
     inc_src,
   ],
-  c_args : [no_override_init_args],
+  c_args : [imagination_c_args, no_override_init_args],
   gnu_symbol_visibility : 'hidden',
   dependencies : [idep_mesautil, idep_nir, idep_vulkan_runtime, dep_csbgen],
   install : true,
index 1eb55bb..6158615 100644 (file)
@@ -32,6 +32,7 @@ rogue_compiler = executable(
     inc_src,
     inc_rogue,
   ],
+  c_args : [imagination_c_args],
   build_by_default : with_imagination_tools,
   install : false,
 )
index bfe8def..b3c8806 100644 (file)
@@ -91,6 +91,7 @@ pvr_deps = [
 ]
 
 pvr_flags = [
+  imagination_c_args,
   no_override_init_args,
 ]
 
index b115d2d..6685dc1 100644 (file)
@@ -43,6 +43,7 @@ libpowervr_pds = static_library(
     inc_imagination,
   ],
   c_args : [
+    imagination_c_args,
     no_override_init_args,
   ],
   gnu_symbol_visibility : 'hidden',