<div dir="ltr">Adding an assert(0) inside that if fires on this test case from <span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0);font-family:Menlo;font-size:11px">clang/test/CodeGenCXX/x86_64-arguments.cpp</span><div><br></div><div>// PR5831<br></div>// CHECK-LABEL: define void @_Z2f34s3_1(i64 %x.coerce)<br>struct s3_0 {};<br>struct s3_1 { struct s3_0 a; long b; };<br>void f3(struct s3_1 x) {}<div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Nov 12, 2020 at 1:06 PM Christoffer Lernö via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I apologize for spamming with so many questions, but this really confusing me.<br>
<br>
In X86_64ABIInfo::classifyArgumentType we have this code:<br>
<br>
>   case Integer:<br>
>     ++neededInt;<br>
>     // Pick an 8-byte type based on the preferred type.<br>
>     HighPart = GetINTEGERTypeAtOffset(CGT.ConvertType(Ty), 8, Ty, 8);<br>
> <br>
>     if (Lo == NoClass)  // Pass HighPart at offset 8 in memory.<br>
>       return ABIArgInfo::getDirect(HighPart, 8);<br>
>     break;<br>
<br>
Zooming in on the ”Lo == NoClass”. As far as I can tell this can only happen in the case where a struct has padding in front, and the first real integer parameter is actually 64 bits in.<br>
<br>
I admit I have no idea how to construct such a type in C to trigger this. Since Clang has a non-trivial amount of code to handle this I am wondering what I’m missing. (I’ve looked through the x86 test cases as well but was unable to find a test case for this particular situation. I might have overlooked something though)<br>
<br>
<br>
/Christoffer<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>