erichkeane added a comment.

So the idea of the SEMA check is right, but it ultimately isn't correct.  
Integers up to 128 can be called, as long as you use compiler-rt 
(--rtlib=compiler-rt), see https://godbolt.org/z/JDXZG_.

However, 129 bits results in a crash in LLVM: https://godbolt.org/z/q432t_

When you change this, please add tests for 128/127 bit as well.  AND the new 
error message needs a SEMA test as well.



================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:7939
   "to a non-const integer (%0 invalid)">;
+def err_overflow_builtin_extint_size : Error<
+  "_ExtInt argument larger than 64-bits to overflow builtin requires runtime "
----------------
Mentioning target-specific support here seems incorrect. @rjmccall I cannot 
think of a better wording, can you?


================
Comment at: clang/lib/Sema/SemaChecking.cpp:339
+                : Arg.get()->getType()->getAs<PointerType>()->getPointeeType();
+      if (Ty->isExtIntType() && S.getASTContext().getIntWidth(Ty) > 64) {
+        S.Diag(Arg.get()->getBeginLoc(), 
diag::err_overflow_builtin_extint_size)
----------------
I'll explain it below, but while I think this is the right IDEA, I think >64 is 
wrong.  It should be >128.

Second, this requires a SEMA test.


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

https://reviews.llvm.org/D81420



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

Reply via email to