Author: Timm Bäder Date: 2024-05-22T12:14:56+02:00 New Revision: e5936b245e9af0cea69a7e4eae22a05b7ffcf5a3
URL: https://github.com/llvm/llvm-project/commit/e5936b245e9af0cea69a7e4eae22a05b7ffcf5a3 DIFF: https://github.com/llvm/llvm-project/commit/e5936b245e9af0cea69a7e4eae22a05b7ffcf5a3.diff LOG: [clang][Interp][NFC] Fix toAPValue() for array root pointers isArrayElement() returns false for them, so we used to add the decl to the path, causing wrong APValues to be generated. Added: Modified: clang/lib/AST/Interp/Pointer.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Pointer.cpp b/clang/lib/AST/Interp/Pointer.cpp index ee8cedccb8d4b..e45c291668caf 100644 --- a/clang/lib/AST/Interp/Pointer.cpp +++ b/clang/lib/AST/Interp/Pointer.cpp @@ -144,13 +144,18 @@ APValue Pointer::toAPValue() const { // TODO: compute the offset into the object. CharUnits Offset = CharUnits::Zero(); - bool IsOnePastEnd = isOnePastEnd(); // Build the path into the object. Pointer Ptr = *this; while (Ptr.isField() || Ptr.isArrayElement()) { - if (Ptr.isArrayElement()) { - Path.push_back(APValue::LValuePathEntry::ArrayIndex(Ptr.getIndex())); + if (Ptr.isArrayRoot()) { + Path.push_back(APValue::LValuePathEntry::ArrayIndex(0)); + Ptr = Ptr.getBase(); + } else if (Ptr.isArrayElement()) { + if (Ptr.isOnePastEnd()) + Path.push_back(APValue::LValuePathEntry::ArrayIndex(Ptr.getArray().getNumElems())); + else + Path.push_back(APValue::LValuePathEntry::ArrayIndex(Ptr.getIndex())); Ptr = Ptr.getArray(); } else { // TODO: figure out if base is virtual @@ -173,7 +178,7 @@ APValue Pointer::toAPValue() const { // Just invert the order of the elements. std::reverse(Path.begin(), Path.end()); - return APValue(Base, Offset, Path, IsOnePastEnd, /*IsNullPtr=*/false); + return APValue(Base, Offset, Path, /*IsOnePastEnd=*/false, /*IsNullPtr=*/false); } void Pointer::print(llvm::raw_ostream &OS) const { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits