[Lldb-commits] [PATCH] D113498: [lldb] Constant-resolve operands to `getelementptr`
Andy Yankovsky via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Nov 18 01:27:21 PST 2021
werat added a comment.
In D113498#3139112 <https://reviews.llvm.org/D113498#3139112>, @shafik wrote:
> On the other hand this is a well-formed constant expression:
>
> static const int x =0;
> constexpr const int* ip1 = &x + 1;
>
> Does that get you the test case you need?
This expression seems to be similar to what I have in the test case now.
(lldb) p static const int x = 0; constexpr const int* ip1 = &x + 1;
...
; Function Attrs: convergent noinline nounwind optnone
define dso_local void @"?$__lldb_expr@@YAXPEAX at Z"(i8* %"$__lldb_arg") #0 {
entry:
%"$__lldb_arg.addr" = alloca i8*, align 8, !clang.decl.ptr !9
%ip1 = alloca i32*, align 8, !clang.decl.ptr !10
store i8* %"$__lldb_arg", i8** %"$__lldb_arg.addr", align 8
store i32* bitcast (i8* getelementptr (i8, i8* bitcast (i32* @"?x@?1??$__lldb_expr@@YAXPEAX at Z@4HB" to i8*), i64 4) to i32*), i32** %ip1, align 8
ret void
}
As far as I understand, `getelementptr (i8, i8* bitcast (i32* @"?x@?1??$__lldb_expr@@YAXPEAX at Z@4HB" to i8*), i64 4)` is a well-formed constant expression, however it has `GlobalVariableVal` as one of it's operand. Even though `GlobalVariableVal` is `Constant`, I think it's not always possible to resolve its value (please correct me if that's not true, not very familiar with IR). Even if there's a way, it's not currently implemented in the IRInterpreter -- `CanResolveConstant` will return false when it sees `GlobalVariableVal`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D113498/new/
https://reviews.llvm.org/D113498
More information about the lldb-commits
mailing list