[PATCH] D50902: [compiler-rt][ubsan] Split Implicit Integer Truncation Sanitizer into unsigned and signed checks

Filipe Cabecinhas via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 27 09:31:29 PDT 2018


filcab added inline comments.


================
Comment at: lib/ubsan/ubsan_handlers.h:128
 enum ImplicitConversionCheckKind : unsigned char {
-  ICCK_IntegerTruncation = 0,
+  // Kind 0 was used briefly.
+  ICCK_UnsignedIntegerTruncation = 1,
----------------
lebedev.ri wrote:
> filcab wrote:
> > We did release an llvm version with that kind, though.
> > 
> > Can you re-add it, with an "... (un)signed..." in the error message (or something better, of course), so we still support files compiled with an older (but released) compiler, please?
> @filcab @vitalybuka
> https://reviews.llvm.org/D50901#inline-462927
> 
> > vitalybuka
> > I don't think we try support mismatched versions of clang and compiler-rt
> 
> Please make up your mind :)
> Do we or don't we?
> 
> (If we do, i can just reinstate all that shiny upgrade logic, which is fully-functional)
We don't have a "we should always be backwards compatible" rule, or anything close to it. The llvm releases don't promise to keep the sanitizers backwards compatible.

*But*, as I mentioned on the clang part, we have, in the past, tried to keep compatibility if it's simple and easy. Otherwise, having a linker error helps avoiding surprising runtime error messages when there's a mix of objects from different versions (which can happen anyway. Would be nice on our part to not make it worse :-) ).
Example of maintaining backwards compat: https://reviews.llvm.org/D11793
Example of changing the ABI + revving up the number so we get linker errors when mixing:  https://reviews.llvm.org/D28244

In this case, we can have one of these solutions:
  - Keep backwards compatibility by supporting the older enum value, at the expense of 2 or 3 lines of code.
  - Rev up the version number for an ABI break, "just" so we can re-use that value (no savings in struct size or anything)
  - Silently re-use that value and possibly issuing the wrong signed/unsigned message if there is a mix

I think the expense of supporting the first case is not enough to make us pick one of the other two.

Thank you,
 Filipe


Repository:
  rCRT Compiler Runtime

https://reviews.llvm.org/D50902





More information about the llvm-commits mailing list