pengfei added a comment.

@jyu2, Thanks for the detailed information.

> Besides, if we change "=rm" to "=r"
> or "=m", GCC and ICC will report error differently. Which gives me an
> impression that the use of constraint is undefined behavior.
> To me it is defined behavior. Or I may missing some thing here.

Sorry, I didn't describe it clearly. I meant it's ub when they are used 
together with structure type. E.g., https://godbolt.org/z/ssY5K4xEP
As you can see, when we use "=rm", GCC and ICC happen to work, that's because 
GCC only allows the structure to be passed on register with ICC only allows 
memory. I didn't find a document which describes the relationships between 
structure and its output constraint.
Besides, https://godbolt.org/z/5ex9x3dvv shows GCC and ICC have some rules when 
we passing a structure (Adding one more element in the exapmles will fail on 
both GCC and ICC). I didn't find the document either.

> code doesn't make much sense to me.

This patch doesn't change any functionality of Clang. We just adding more sema 
checks to avoid the ugly crash. This is required from our user.
I believe we can do more things to march the behavior of GCC and ICC. I have 
added a FIXME in the code. Considering we don't have a clear document and such 
a case is in rare. And we don't have such requirment from user. I think this 
patch is till better than none.
Does it make sense?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107141/new/

https://reviews.llvm.org/D107141

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to