llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Timm Baeder (tbaederr) <details> <summary>Changes</summary> We do a similar things a few lines above for `Index`: ``` // Get a version of the index comparable to the type. T Index = T::from(Ptr.getIndex(), Offset.bitWidth()); ``` --- Full diff: https://github.com/llvm/llvm-project/pull/68679.diff 2 Files Affected: - (modified) clang/lib/AST/Interp/Interp.h (+1-1) - (modified) clang/test/AST/Interp/intap.cpp (+9) ``````````diff diff --git a/clang/lib/AST/Interp/Interp.h b/clang/lib/AST/Interp/Interp.h index 47dc1d08c9c4d8b..620d797da27023f 100644 --- a/clang/lib/AST/Interp/Interp.h +++ b/clang/lib/AST/Interp/Interp.h @@ -1437,7 +1437,7 @@ bool OffsetHelper(InterpState &S, CodePtr OpPC, const T &Offset, return false; }; - unsigned MaxOffset = MaxIndex - Ptr.getIndex(); + T MaxOffset = T::from(MaxIndex - Ptr.getIndex(), Offset.bitWidth()); if constexpr (Op == ArithOp::Add) { // If the new offset would be negative, bail out. if (Offset.isNegative() && (Offset.isMin() || -Offset > Index)) diff --git a/clang/test/AST/Interp/intap.cpp b/clang/test/AST/Interp/intap.cpp index b3f02d2b769531d..e9e68438bb597aa 100644 --- a/clang/test/AST/Interp/intap.cpp +++ b/clang/test/AST/Interp/intap.cpp @@ -76,6 +76,15 @@ namespace i128 { // expected-note {{is outside the range of representable values of type}} } +namespace AddSubOffset { + constexpr __int128 A = 1; + constexpr int arr[] = {1,2,3}; + constexpr const int *P = arr + A; + static_assert(*P == 2, ""); + constexpr const int *P2 = P - A; + static_assert(*P2 == 1,""); +} + #else /// No int128 support, so no expected directives. `````````` </details> https://github.com/llvm/llvm-project/pull/68679 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits