Author: Timm Baeder
Date: 2026-08-07T09:47:37+02:00
New Revision: 9d3a3fa57c47fd06efea20f100ec747f5e5fbfdd

URL: 
https://github.com/llvm/llvm-project/commit/9d3a3fa57c47fd06efea20f100ec747f5e5fbfdd
DIFF: 
https://github.com/llvm/llvm-project/commit/9d3a3fa57c47fd06efea20f100ec747f5e5fbfdd.diff

LOG: [clang][AST] Print OnePastTheEnd bit in `APValue::dump()` (#214450)

For lvalue APValues.

Added: 
    

Modified: 
    clang/lib/AST/TextNodeDumper.cpp
    clang/test/AST/ast-dump-APValue-lvalue.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/TextNodeDumper.cpp 
b/clang/lib/AST/TextNodeDumper.cpp
index d987dd6cacd12..e9f0727becfe1 100644
--- a/clang/lib/AST/TextNodeDumper.cpp
+++ b/clang/lib/AST/TextNodeDumper.cpp
@@ -759,6 +759,7 @@ void TextNodeDumper::Visit(const APValue &Value, QualType 
Ty) {
     }
     OS << ", Null=" << Value.isNullPointer()
        << ", Offset=" << Value.getLValueOffset().getQuantity()
+       << ", OnePastTheEnd=" << Value.isLValueOnePastTheEnd()
        << ", HasPath=" << Value.hasLValuePath();
     if (Value.hasLValuePath()) {
       OS << ", PathLength=" << Value.getLValuePath().size();

diff  --git a/clang/test/AST/ast-dump-APValue-lvalue.cpp 
b/clang/test/AST/ast-dump-APValue-lvalue.cpp
index f4cf2f5291760..92e881aca3d80 100644
--- a/clang/test/AST/ast-dump-APValue-lvalue.cpp
+++ b/clang/test/AST/ast-dump-APValue-lvalue.cpp
@@ -40,31 +40,35 @@ struct MP : P, Q {
 void Test(int (&arr)[10]) {
   constexpr int *pi = &i;
   // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pi 'int 
*const' constexpr cinit
-  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=0, 
HasPath=1, PathLength=0, Path=()
+  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=0, 
OnePastTheEnd=0, HasPath=1, PathLength=0, Path=()
+
+  constexpr int *pi2 = &i + 1;
+  // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pi2 'int 
*const' constexpr cinit
+  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=4, 
OnePastTheEnd=1, HasPath=1, PathLength=0, Path=()
 
   constexpr int *psi = &s.i;
   // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} psi 'int 
*const' constexpr cinit
-  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=0, 
HasPath=1, PathLength=1, Path=({{.*}})
+  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=0, 
OnePastTheEnd=0, HasPath=1, PathLength=1, Path=({{.*}})
 
   constexpr int *psii = &s.ii;
   // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} psii 'int 
*const' constexpr cinit
-  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=4, 
HasPath=1, PathLength=1, Path=({{.*}})
+  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=4, 
OnePastTheEnd=0, HasPath=1, PathLength=1, Path=({{.*}})
 
   constexpr int *pf = &f.s.ii;
   // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pf 'int 
*const' constexpr cinit
-  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=16, 
HasPath=1, PathLength=2, Path=({{.*}}, {{.*}})
+  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=16, 
OnePastTheEnd=0, HasPath=1, PathLength=2, Path=({{.*}}, {{.*}})
 
   constexpr char *pc = &f.padding[2];
   // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pc 'char 
*const' constexpr cinit
-  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=2, 
HasPath=1, PathLength=2, Path=({{.*}}, 2)
+  // CHECK-NEXT:  |   |-value: LValue Base=VarDecl {{.*}}, Null=0, Offset=2, 
OnePastTheEnd=0, HasPath=1, PathLength=2, Path=({{.*}}, 2)
 
   constexpr const int *n = nullptr;
   // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} n 'const 
int *const' constexpr cinit
-  // CHECK-NEXT:  |   |-value: LValue Base=null, Null=1, Offset=0, HasPath=1, 
PathLength=0, Path=()
+  // CHECK-NEXT:  |   |-value: LValue Base=null, Null=1, Offset=0, 
OnePastTheEnd=0, HasPath=1, PathLength=0, Path=()
 
   constexpr const std::type_info* pti = &typeid(int);
   // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pti 'const 
std::type_info *const' constexpr cinit
-  // CHECK-NEXT:  |   |-value: LValue Base=TypeInfoLValue typeid(int), Null=0, 
Offset=0, HasPath=1, PathLength=0, Path=()
+  // CHECK-NEXT:  |   |-value: LValue Base=TypeInfoLValue typeid(int), Null=0, 
Offset=0, OnePastTheEnd=0, HasPath=1, PathLength=0, Path=()
 
   constexpr int(MP::*pmi) = (int MP::*)&P::x;
   // CHECK:  | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pmi 'int 
(MP::*const)' constexpr cinit


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to