This series aims to fix hundreds of missing initializer warnings in generated header files when compiling with -Wextra
V1: Fix the old fashioned way by adding 0s where needed V2: switch to designated initializers (Emil), didnt send V3: add some layout so its easier to read and create a new version for vk that just uses {0} instead of {0, 0, 0, 0, 0} (same thing, less zeros) --- Because this generated such unexpected controversy and out of curiosity i wrote a little test program to show the problem. Compile with -Wextra. There is no init code generated for any variant on any compiler i tested. gcc version 5.4.1 20170304 (Ubuntu 5.4.1-8ubuntu1) gcc version 6.3.0 20170406 (Ubuntu 6.3.0-12ubuntu2) gcc version 7.0.1 20170407 (experimental) [trunk revision 246759] (Ubuntu 7-20170407-0ubuntu2) clang version 4.0.0-1ubuntu1 (tags/RELEASE_400/rc1) clang version 5.0.0-svn305158-0~z~padoka0 (trunk) MSVC Compiler Version 19.00.24210 --- struct s { int a; int b; int c; int d; int e; }; static const struct s str1 = {}; // gcc 5/6/7, clang 4/5 accept this without warning, MSVC2013 doesnt compile (not Standard, will generate a warning with -Wpendantic, much prettier however) static const struct s str2 = {0}; // clang 4/5 generate a warning here (although ANSI Standard) static const struct s str3 = {0,}; // clang 4/5 generate a warning here (although ANSI Standard) static const struct s str4 = {1,2,3}; // gcc 5/6/7, clang 4/5 generate a warning here static const struct s str5 = {1,2,3,}; // gcc 5/6/7, clang 4/5 generate a warning here static const struct s str6 = {1,2,3,0,0}; // this is fine with all compilers static const struct s str7 = {.a = 1, .b = 2, .c = 3}; // this might not compile on MSVC <2013 but couldnt test int main() { return 0; } --- This is what Rust does: --- #![allow(unused_variables)] #![allow(dead_code)] #[derive(Default)] struct Test { a: i32, b: i32, c: i32, d: i32, e: i32 } fn main() { //all of these wont work // let t1 = Test {}; // let t2 = Test {0}; // let t3 = Test {0,}; // let t3b= Test {..}; would be very cool // let t4 = Test {1,2,3}; // let t5 = Test {1,2,3,}; // let t6 = Test {1,2,3,0,0}; // let t7 = Test {a: 1, b: 1}; // let t8 = Test {a: 1, b: 1, ..}; would be cool //only this is legal in rust let t9: Test = Default::default(); let t10 = Test {..Default::default()}; let t11 = Test {a: 1, b: 1, ..Default::default()}; let t12 = Test {a: 1, b: 1, c: 1, d: 1, e: 1}; println!("Hello, world!"); } --- So in the end I followed Emils suggestion of designated initializers for partial initialization, to make it explicit and get rid of the warnings. Please kindly review and push. Thanks, Benedikt _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev