pengfei added a comment.

> First I did not say "code doesn't make much sense to me". This is copy form 
> your description.

Oop, my bad understanding. :)

> both gcc and icc generated code is not making sense to you.

Yes. Unless there's document to specify the behavior clearly.

> So instead, you want clang give error for this when output size greater than 
> input size.

Giving error only when output size greater than input size and output type is 
not one of the 3 cases in CGStmt.cpp:2480. I.e.: `OutputDomain != AD_Other || 
OutSize <= InSize`. Otherwise, Clang will crash there.

> What about input size greater than output size? It seems the error already 
> emit for that case in Sema. Should also handle the same with your case in 
> Sema?

Sema emits error when 1) `InputDomain != AD_Other` 2) Output is mentioned and 
`OutSize < InSize`. So input size is allow to be greater than output size only 
when output is not mentioned. I don't fully understand the code in CGStmt.cpp, 
but according to comment in line 2463, it seems only larger output result needs 
to be handled.



================
Comment at: clang/lib/Sema/SemaStmtAsm.cpp:670
+        OutputConstraintInfos[TiedTo].allowsRegister() &&
+        (OutputDomain != AD_Other || OutSize <= InSize))
       continue;
----------------
jyu2 wrote:
> Why not emit error in here?
Actually, adding this condition will let it fall through and emit error at line 
688.


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