Author: Timm Baeder Date: 2023-11-05T08:26:29+01:00 New Revision: a9af8f8882f9d64870d3b60adfbe07e59c63c523
URL: https://github.com/llvm/llvm-project/commit/a9af8f8882f9d64870d3b60adfbe07e59c63c523 DIFF: https://github.com/llvm/llvm-project/commit/a9af8f8882f9d64870d3b60adfbe07e59c63c523.diff LOG: [clang][Interp] Implement IntegralAP::truncate() (#69912) Added: Modified: clang/lib/AST/Interp/IntegralAP.h clang/test/AST/Interp/intap.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/IntegralAP.h b/clang/lib/AST/Interp/IntegralAP.h index 9aefea6d0c47ed9..1f535d420bcd54b 100644 --- a/clang/lib/AST/Interp/IntegralAP.h +++ b/clang/lib/AST/Interp/IntegralAP.h @@ -140,9 +140,8 @@ template <bool Signed> class IntegralAP final { return NameStr; } - IntegralAP truncate(unsigned bitWidth) const { - assert(false); - return V; + IntegralAP truncate(unsigned BitWidth) const { + return IntegralAP(V.trunc(BitWidth)); } IntegralAP<false> toUnsigned() const { diff --git a/clang/test/AST/Interp/intap.cpp b/clang/test/AST/Interp/intap.cpp index 02a860eb0986c15..db9f516131af474 100644 --- a/clang/test/AST/Interp/intap.cpp +++ b/clang/test/AST/Interp/intap.cpp @@ -121,4 +121,20 @@ namespace AddSubOffset { static_assert(*P2 == 1,""); } +namespace Bitfields { + struct S1 { + unsigned _BitInt(128) a : 2; + }; + constexpr S1 s1{100}; // ref-warning {{changes value from 100 to 0}} \ + // expected-warning {{changes value from 100 to 0}} + constexpr S1 s12{3}; + static_assert(s12.a == 3, ""); + + struct S2 { + unsigned __int128 a : 2; + }; + constexpr S2 s2{100}; // ref-warning {{changes value from 100 to 0}} \ + // expected-warning {{changes value from 100 to 0}} +} + #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits