<div dir="ltr">We perform similar alignment checks in 'Sema::AddAlignedAttr' like ensuring that the number is a power-of-two and less than 8192. <div>If I understand you correctly, you would want to add your checks there.<br>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jan 3, 2014 at 9:58 AM, Dario Domizioli <span dir="ltr"><<a href="mailto:dario.domizioli@gmail.com" target="_blank">dario.domizioli@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello again, cfe-dev.<br><div><br></div><div>I'm back from holidays and I'm looking at this again.</div>
<div>I'm also having trouble performing the checks at CodeGen time since there are many places where variables are emitted; but still it feels wrong to perform checks during CodeGen.</div>
<div><br></div><div>Any ideas where it would be best to perform alignment checks?</div><div class="im"><div><div>Thanks,</div><div>    Dario Domizioli</div><div>    SN Systems - Sony Computer Entertainment Group</div></div>
<div><br></div>
<div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On 18 December 2013 12:05, Dario Domizioli <span dir="ltr"><<a href="mailto:dario.domizioli@gmail.com" target="_blank">dario.domizioli@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hello cfe-dev.</div><div><br></div><div>I am trying to perform additional checks on the alignment of C++ variables (outputting diagnostic messages if the checks trigger), and the place where it feels more natural to do so is in Sema::ActOnVariableDeclarator. There is already a check for under-alignment there (a call to Sema::CheckAlignasUnderalignment) so I thought I was on the right track.</div>


<div>However I am finding that my checks don't trigger when the variable being declared/defined is a template instantiation.</div><div><br></div><div>Suppose for the sake of example that I wanted to add a check that warns if the alignment exceeds a certain number of CharUnits, say 32. If I put the check in ActOnVariableDeclarator right after the under-alignment check, it does catch this case:</div>


<div><br></div><div>struct __attribute__(( aligned(64) )) my_aligned { int x; }</div><div>// ...</div><div>my_aligned my_variable; // Diagnostic here</div><div><br></div><div>However it does not catch this case:</div><div>


<br></div><div>template <typename T> class __attribute__(( aligned(64) )) my_aligned_template {</div><div>    int x;</div><div>    void foo (T param) { /* some code */ }</div><div>}</div><div>// ...</div><div>my_aligned_template<float> my_variable; // No diagnostic here, but the IR has the right alignment (64)</div>


<div><br></div><div>I am using ASTContext::getDeclAlign to get the alignment of the variable in the declaration, as the documentation says that it returns a conservative alignment for the variable, and it's actually the same function used at CodeGen time to determine the alignment.</div>


<div>However I seem to understand that at that point (when ActOnVariableDeclarator runs) the template instantiation hasn't been processed yet and therefore the type of the variable is still a dependent type (despite the fact that the layout of my_aligned_template does not in fact depend on T, but I accept that in the general case it can do). This means that the alignment is unknown at that stage and I can't really check it.</div>


<div>In fact, I have noticed that Sema::CheckAlignasUnderalignment (which is my reference for implementing the checks) also skips dependent and incomplete types.</div><div><br></div><div>Of course when ASTContext::getDeclAlign is used later on in CodeGen everything is known about variables and their types, so I could move my checks there, but it would feel wrong to do the checks while IR is being generated, I think Sema should be the right place to perform semantic checks.</div>


<div><br></div><div>Can anyone point me in the right direction? Is there a more sensible place than ActOnVariableDeclarator where I can put my additional alignment checks?</div><div><br></div><div>Thanks,</div><div>    Dario Domizioli</div>


<div>    SN Systems - Sony Computer Entertainment Group</div></div>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>