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