Benedikt,

We normally prefix the first line of the git commit message with a prefix to indicate the module effected. So in this case, you might use "amd: Fix missing..." or "r600: Fix missing". You can use git log to get an idea.

-Brian

On 06/11/2017 11:17 AM, Benedikt Schemmer wrote:
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


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to