<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Thanks Alex and Christian,</p>
<p><br>
</p>
<p>Yup turns out [0] is not ISO C but [] is (from the googles)</p>
<p><br>
</p>
<p><strong style="margin: 0px; padding: 0px; border: 0px; font-size: 15px; color: rgb(36, 39, 41); font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; line-height: 19.5px; background-color: rgb(255, 248, 220);">C99 6.7.2.1, §16</strong><span style="color: rgb(36, 39, 41); font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; background-color: rgb(255, 248, 220);">:
 As a special case, the last element of a structure with more than one named member may have an incomplete array type; this is called a flexible array member.</span><br>
</p>
<p><span style="color: rgb(36, 39, 41); font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; background-color: rgb(255, 248, 220);"><br>
</span></p>
<p><span style="color: rgb(36, 39, 41); font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; background-color: rgb(255, 248, 220);">Either way like I said I'm not strongly motivated to change it just caught my attention.</span></p>
<p><span style="color: rgb(36, 39, 41); font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; background-color: rgb(255, 248, 220);"><br>
</span></p>
<p><font color="#242729" face="Arial, Helvetica Neue, Helvetica, sans-serif"><span style="font-size: 15px; line-height: 19.5px; background-color: rgb(255, 248, 220);">Cheers,</span></font></p>
<p><font color="#242729" face="Arial, Helvetica Neue, Helvetica, sans-serif"><span style="font-size: 15px; line-height: 19.5px; background-color: rgb(255, 248, 220);">Tom</span></font></p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Deucher, Alexander<br>
<b>Sent:</b> Thursday, August 18, 2016 11:50<br>
<b>To:</b> StDenis, Tom; Alex Deucher<br>
<b>Cc:</b> Christian König; amd-gfx list<br>
<b>Subject:</b> RE: tidy'ing up cz_hwmgr.c</font>
<div> </div>
</div>
<div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif;">
<span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:#1F497D">IIRC, zero sized arrays are not technically allowed in C, although gcc allows them.  As I said, some versions of gcc worked, others didn't.  I'm not sure why.  Also, my example
 was slightly wrong.  atombios.h uses arrays of size 1, not 0.  So my example should look like:</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif;">
<span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:#1F497D"> </span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">struct table {</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">   uint16_t size;</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">   struct element elements[1];</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">};</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif;">
<span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:#1F497D"> </span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif;">
<span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:#1F497D">atombios.h uses [1] since I don't think [0] is portable.  The same indexing issue applies to [1].</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif;">
<span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:#1F497D"> </span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif;">
<span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:#1F497D">Alex</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif;">
<span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:#1F497D"> </span></p>
<div style="border:none; border-left:solid blue 1.5pt; padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0in 0in 0in">
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif;">
<b><span style="font-size:10.0pt; font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt; font-family:"Tahoma","sans-serif""> amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org]
<b>On Behalf Of </b>StDenis, Tom<br>
<b>Sent:</b> Thursday, August 18, 2016 11:40 AM<br>
<b>To:</b> Alex Deucher<br>
<b>Cc:</b> Christian König; amd-gfx list<br>
<b>Subject:</b> Re: tidy'ing up cz_hwmgr.c</span></p>
</div>
</div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif;">
 </p>
<div id="divtagdefaultwrapper">
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black">It had to be something more complicated because this demo program</span></p>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">#include <stdio.h></span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">#include <stdlib.h></span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">struct one {</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">char *foo;</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">int bar[0];</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">};</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">struct two {</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">char *foo;</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">int bar[1];</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">};</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">int main(void)</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">{</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">struct one *a = calloc(1, sizeof(struct one) + 4 * sizeof(int));</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">struct two *b = calloc(1, sizeof(struct two) + 3 * sizeof(int));</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">int x;</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">printf("a == %p\n", a);</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">for (x = 0; x < 4; x++)</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">printf("&a.bar[%d] = %p\n", x, &a->bar[x]);</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">printf("b == %p\n", b);</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">for (x = 0; x < 4; x++)</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">printf("&b.bar[%d] = %p\n", x, &b->bar[x]);</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">return 0;</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">}</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black">produces this output</span></p>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">tom@fx8:~$ gcc test.c -o test</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">tom@fx8:~$ ./test</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">a == 0x1fd4010</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">&a.bar[0] = 0x1fd4018</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">&a.bar[1] = 0x1fd401c</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">&a.bar[2] = 0x1fd4020</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">&a.bar[3] = 0x1fd4024</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">b == 0x1fd4030</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">&b.bar[0] = 0x1fd4038</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">&b.bar[1] = 0x1fd403c</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">&b.bar[2] = 0x1fd4040</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">&b.bar[3] = 0x1fd4044</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">Which is exactly what you'd expect.  I'm not strongly advocating we change the PP code just noting it's not really clear that it's correct from a first reading and in theory would be better with
 [0]. </span></p>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">Tom</span></p>
<div>
<div align="center" style="text-align: center; margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">
<hr size="2" width="98%" align="center">
</span></div>
<div id="divRplyFwdMsg">
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<b><span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:black">From:</span></b><span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:black"> Alex Deucher <<a href="mailto:alexdeucher@gmail.com" style="color: blue; text-decoration: underline;">alexdeucher@gmail.com</a>><br>
<b>Sent:</b> Thursday, August 18, 2016 11:33<br>
<b>To:</b> StDenis, Tom<br>
<b>Cc:</b> Christian König; amd-gfx list<br>
<b>Subject:</b> Re: tidy'ing up cz_hwmgr.c</span><span style="font-family:"Calibri","sans-serif"; color:black">
</span></p>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
</div>
<div>
<div>
<div>
<div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">The problem we ran into was when we had a struct like this:</span></p>
</div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">struct table {</span></p>
</div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">   uint16_t size;</span></p>
</div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">   struct element elements[0];</span></p>
<div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">};</span></p>
<div>
<div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">and then we would try and index the array:</span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">for (i = 0; i < table->size; i++) {</span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">  element = &table->elements[i];</span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">}</span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">element ended up off in the weeds.  The only thing that seems to make some versions of gcc happy was pointer arithmetic.  E.g.,</span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">element = (struct element *)((char *)&table->elements[0] + (sizeof(struct element) * i));</span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">Alex</span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">On Thu, Aug 18, 2016 at 11:21 AM, StDenis, Tom <<a href="mailto:Tom.StDenis@amd.com" target="_blank" style="color: blue; text-decoration: underline;">Tom.StDenis@amd.com</a>> wrote:</span></p>
<div>
<div>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black">Any modern GCC should support [0] at the tail of a struct.  This came up because when I was reading the code I saw they allocated 7 slots (plus the size of the struct)
 but then fill 8 slots.  It's just weird <img border="0" width="19" height="19" id="_x0000_i1026" alt="��" tabindex="0" style="-webkit-user-select: none;" src="cid:image001.png@01D1F946.4668DF40"></span></p>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black">Using [0] in the struct and allocating for 8 entries makes more sense and is clearer to read.</span></p>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black">Tom</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
<div>
<div align="center" style="text-align: center; margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">
<hr size="2" width="98%" align="center">
</span></div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<b><span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:black">From:</span></b><span style="font-size:11.0pt; font-family:"Calibri","sans-serif"; color:black"> Christian König <<a href="mailto:deathsimple@vodafone.de" target="_blank" style="color: blue; text-decoration: underline;">deathsimple@vodafone.de</a>><br>
<b>Sent:</b> Thursday, August 18, 2016 11:17<br>
<b>To:</b> StDenis, Tom; amd-gfx list<br>
<b>Subject:</b> Re: tidy'ing up cz_hwmgr.c</span><span style="font-family:"Calibri","sans-serif"; color:black">
</span></p>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
</div>
<div>
<div>
<div>
<div>
<blockquote style="margin-top:5.0pt; margin-bottom:5.0pt">
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">Has a [1] array at the tail which is then kzalloc'ed with N-1 entries.  Shouldn't that just be a [0] with N entries allocated for clarity?</span></p>
</div>
</blockquote>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">Actually the starting address of a dynamic array should be manually calculated instead of using [1] or [0].<br>
<br>
We had tons of problems with that because some gcc versions get this wrong and the atombios code used this as well.<br>
<br>
Alex how did we resolved such issues?<br>
<br>
Regards,<br>
Christian.<br>
<br>
Am 18.08.2016 um 16:26 schrieb StDenis, Tom:</span></p>
</div>
<blockquote style="margin-top:5.0pt; margin-bottom:5.0pt">
<div>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black">Tidying up cz_hwmgr.c I noted a couple of things but first is </span></p>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">static bool cz_dpm_check_smu_features(struct pp_hwmgr *hwmgr,</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">unsigned long check_feature);</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">Which will return "true" if the smu call fails
<b>or</b> the feature is set.  </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">The structure </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Courier New"; color:black">struct phm_clock_voltage_dependency_table;</span><span style="font-family:"Calibri","sans-serif"; color:black"></span></p>
</div>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">Has a [1] array at the tail which is then kzalloc'ed with N-1 entries.  Shouldn't that just be a [0] with N entries allocated for clarity?</span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black">Tom</span></p>
</div>
<div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
</div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"><br>
<br>
</span></p>
<pre style="margin: 0in 0in 0.0001pt; font-size: 10pt; font-family: "Courier New"; background: white;"><span style="color:black">_______________________________________________</span></pre>
<pre style="margin: 0in 0in 0.0001pt; font-size: 10pt; font-family: "Courier New"; background: white;"><span style="color:black">amd-gfx mailing list</span></pre>
<pre style="margin: 0in 0in 0.0001pt; font-size: 10pt; font-family: "Courier New"; background: white;"><span style="color:black"><a href="mailto:amd-gfx@lists.freedesktop.org" target="_blank" style="color: blue; text-decoration: underline;">amd-gfx@lists.freedesktop.org</a></span></pre>
<pre style="margin: 0in 0in 0.0001pt; font-size: 10pt; font-family: "Courier New"; background: white;"><span style="color:black"><a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx" target="_blank" style="color: blue; text-decoration: underline;">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a></span></pre>
</blockquote>
<p style="background:white"><span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
</div>
</div>
</div>
</div>
</div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"><br>
_______________________________________________<br>
amd-gfx mailing list<br>
<a href="mailto:amd-gfx@lists.freedesktop.org" style="color: blue; text-decoration: underline;">amd-gfx@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx" target="_blank" style="color: blue; text-decoration: underline;">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a></span></p>
</div>
<p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman", serif; background: white;">
<span style="font-family:"Calibri","sans-serif"; color:black"> </span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>