[PATCH] D22441: Fix isShiftedInt and isShiftedUint for widths > 32.
    Justin Lebar via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon Jul 18 12:55:24 PDT 2016
    
    
  
jlebar added a comment.
> 1> .\llvm\include\llvm/Support/MathExtras.h(296): warning C4293: '<<': shift count negative or too big, undefined behavior
>  1> .\llvm\include\llvm/Support/MathExtras.h(322): note: see reference to function template instantiation 'bool llvm::isUInt<64>(uint64_t)' being compiled
>  1> .\llvm\unittests\Support\MathExtrasTest.cpp(401): note: see reference to function template instantiation 'bool llvm::isShiftedUInt<1,63>(uint64_t)' being compiled
Ugh.  I think MSVC is wrong.  isUInt<64> does
  return N >= 64 || x < (UINT64_C(1)<<(N));
Which should be safe because of short-circuit evaluation.
I guess we can specialize the isUInt<N> template.  :-/  Can we file a bug on msvc?
Repository:
  rL LLVM
https://reviews.llvm.org/D22441
    
    
More information about the llvm-commits
mailing list