Author: Timm Bäder Date: 2024-08-12T08:28:13+02:00 New Revision: c6062d38f74e600c185c30eec7afaa8d0a007424
URL: https://github.com/llvm/llvm-project/commit/c6062d38f74e600c185c30eec7afaa8d0a007424 DIFF: https://github.com/llvm/llvm-project/commit/c6062d38f74e600c185c30eec7afaa8d0a007424.diff LOG: [clang][Interp][NFC] Cleanup CheckActive() Assert that the given pointer is in a union if it's not active and use a range-based for loop to find the active field. Added: Modified: clang/lib/AST/Interp/Interp.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Interp.cpp b/clang/lib/AST/Interp/Interp.cpp index 89ac6938931133..13390007fde33c 100644 --- a/clang/lib/AST/Interp/Interp.cpp +++ b/clang/lib/AST/Interp/Interp.cpp @@ -125,6 +125,8 @@ static bool CheckActive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, if (Ptr.isActive()) return true; + assert(Ptr.inUnion()); + Pointer U = Ptr.getBase(); Pointer C = Ptr; while (!U.isRoot() && U.inUnion() && !U.isActive()) { @@ -155,8 +157,8 @@ static bool CheckActive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, assert(R && R->isUnion() && "Not a union"); const FieldDecl *ActiveField = nullptr; - for (unsigned I = 0, N = R->getNumFields(); I < N; ++I) { - const Pointer &Field = U.atField(R->getField(I)->Offset); + for (const Record::Field &F : R->fields()) { + const Pointer &Field = U.atField(F.Offset); if (Field.isActive()) { ActiveField = Field.getField(); break; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits