Issue |
130484
|
Summary |
[Question] Is (volatile long double) 0 output from 'ta v' command a bug?
|
Labels |
new issue
|
Assignees |
|
Reporter |
kaixinlalala
|
When using the `ta v` command in LLDB, the output for a variable is `(volatile long double) 0`. I am not sure if this is expected behavior or a potential bug, so I would like to confirm with the developers.
Test Case:
```
#include<functional>
#include<tuple>
#include<variant>
#include<type_traits>
#include<any>
#include<utility>
#include<iostream>
class Container_1 {
private:
unsigned char member_5;
public:
unsigned char member_4;
// Constructor
Container_1(unsigned char member_4_val, unsigned char member_5_val)
: member_4(member_4_val), member_5(member_5_val) {}
// Destructor
~Container_1() {}
};
class Container_2 : public Container_1 {
public:
long long member_6;
double member_7;
Container_1 member_11;
// Constructor
Container_2(long long member_6_val, double member_7_val,
unsigned char member_4_val, unsigned char member_5_val)
: Container_1(member_4_val, member_5_val),
member_6(member_6_val), member_7(member_7_val), member_11(member_4_val, member_5_val) {}
// Destructor
~Container_2() {}
};
// Container_3 class implementation
class Container_3 : public Container_1 {
public:
float member_8;
double member_9;
double member_10;
// Constructor
Container_3(float member_8_val, double member_9_val, double member_10_val,
unsigned char member_4_val, unsigned char member_5_val)
: Container_1(member_4_val, member_5_val),
member_8(member_8_val), member_9(member_9_val), member_10(member_10_val) {}
// Destructor
~Container_3() {}
};
float func8(int p_0)
{
float var335 = 0.5f, var336 = 1.5f, var337 = 2.5f;
int var338 = p_0 + static_cast<int>(var337);
float var339 = var335 + var336 + var337;
for (int i = 0; i < 10; ++i) {
float var340 = 3.5f, var341 = 4.5f, var342 = 5.5f;
float var343 = var335 + var336 + var337 + var339;
int* var344 = &p_0;
}
return var336;
}
template<typename T1>
long double func10(T1 p_0,int p_1,double p_2)
{
static volatile long double var36 = 0.0;
static volatile double var37 = p_2 + p_1;
static volatile double var38 = p_2 * var37;
if (var38 > 100.0) {
static volatile long double var39 = var38 + p_1;
static volatile long double var40 = var37 * p_2;
static long double var41 = p_1 * var39;
static volatile T1 var42 = p_0 + var38;
static volatile long double var43 = var36 + var39 + var40 + var41;
static volatile float var44 = func8(p_1);
if (var43 > 200.0) {
static volatile long double var45 = var43 * 1.5;
static volatile long double var46 = var45 / 2.0;
static volatile long double var47 = var46 - var43;
static volatile int* var48 = &p_1;
static volatile float* var49 = &var44;
func8(*var48);
var44 = *var49;
}
}
return var36;
}
// Global variables
unsigned long int var505;
unsigned int var506;
int var507;
unsigned int* var508;
Container_3 var509(1.5f, 2.5, 3.5, 10, 20);
long int var510;
long double var511;
int main()
{
// Local variables updating global variables
var505 = 100;
var506 = 200;
var507 = 300;
var508 = &var506;
var510 = 400;
var511 = func10(var509.member_10, var507, var509.member_9);
var509.member_4 = static_cast<unsigned char>(var509.member_4 + var511);
if (var509.member_9 > var509.member_10) {
unsigned long int var512 = 500;
unsigned int var513 = var506 + *var508;
unsigned int var514 = var506 + *var508 + var513;
var509.member_9 = 4.5;
var509.member_10 = 5.5;
var509.member_8 = 6.5f;
var509.member_8 = static_cast<float>(var510);
var510 = static_cast<long int>(var509.member_9);
} else {
// Alternative block
}
return 0;
}
```
The result printed by lldb:
```
(lldb) target create "./test_case_0.o"
Current executable set to '/home/hzw/debugger-test/gen_progs/1740728492_BG85H39g/reduced_test_case/test_case_0.o' (x86_64).
(lldb) b func10
Breakpoint 1: where = test_case_0.o`long double func10<double>(double, int, double) + 21 at test_case_0.cpp:82:5, address = 0x00000000000014b5
(lldb) r
Process 290875 launched: '/home/hzw/debugger-test/gen_progs/1740728492_BG85H39g/reduced_test_case/test_case_0.o' (x86_64)
Process 290875 stopped
* thread #1, name = 'test_case_0.o', stop reason = breakpoint 1.1
frame #0: 0x00005555555554b5 test_case_0.o`long double func10<double>(p_0=3.5, p_1=300, p_2=2.5) at test_case_0.cpp:82:5
79 {
80 static volatile long double var36 = 0.0;
81
-> 82 static volatile double var37 = p_2 + p_1;
83 static volatile double var38 = p_2 * var37;
84
85 if (var38 > 100.0) {
(lldb) ta v
Global variables for /home/hzw/debugger-test/gen_progs/1740728492_BG85H39g/reduced_test_case/test_case_0.cpp in /home/hzw/debugger-test/gen_progs/1740728492_BG85H39g/reduced_test_case/test_case_0.o:
(int) ::var507 = 300
(long) ::var510 = 400
(unsigned int *) ::var508 = 0x0000555555558070
(Container_3) ::var509 = {
Container_1 = (member_5 = '\x14', member_4 = '\n')
member_8 = 1.5
member_9 = 2.5
member_10 = 3.5
}
(unsigned int) ::var506 = 200
(unsigned long) ::var505 = 100
(std::ios_base::Init) std::__ioinit = <incomplete type "std::ios_base::Init">
(long double) ::var511 = 0
(lldb) p var36
(volatile long double) 0
(lldb) n
Process 290875 stopped
* thread #1, name = 'test_case_0.o', stop reason = step over
frame #0: 0x00005555555554f1 test_case_0.o`long double func10<double>(p_0=3.5, p_1=300, p_2=2.5) at test_case_0.cpp:83:5
80 static volatile long double var36 = 0.0;
81
82 static volatile double var37 = p_2 + p_1;
-> 83 static volatile double var38 = p_2 * var37;
84
85 if (var38 > 100.0) {
86 static volatile long double var39 = var38 + p_1;
(lldb) fr v
(double) p_0 = 3.5
(int) p_1 = 300
(double) p_2 = 2.5
(lldb) n
Process 290875 stopped
* thread #1, name = 'test_case_0.o', stop reason = step over
frame #0: 0x0000555555555530 test_case_0.o`long double func10<double>(p_0=3.5, p_1=300, p_2=2.5) at test_case_0.cpp:85:9
82 static volatile double var37 = p_2 + p_1;
83 static volatile double var38 = p_2 * var37;
84
-> 85 if (var38 > 100.0) {
86 static volatile long double var39 = var38 + p_1;
87 static volatile long double var40 = var37 * p_2;
88 static long double var41 = p_1 * var39;
(lldb)
Process 290875 stopped
* thread #1, name = 'test_case_0.o', stop reason = step over
frame #0: 0x000055555555554a test_case_0.o`long double func10<double>(p_0=3.5, p_1=300, p_2=2.5) at test_case_0.cpp:86:9
83 static volatile double var38 = p_2 * var37;
84
85 if (var38 > 100.0) {
-> 86 static volatile long double var39 = var38 + p_1;
87 static volatile long double var40 = var37 * p_2;
88 static long double var41 = p_1 * var39;
89
(lldb) fr v
(double) p_0 = 3.5
(int) p_1 = 300
(double) p_2 = 2.5
(lldb) p var39
(volatile long double) 0
(lldb) q
Quitting LLDB will kill one or more processes. Do you really want to proceed: [Y/n] y
```
Compilation command:
```
clang++ test_case_0.cpp -O0 -o test_case_0.o -g
```
Compile Version: clang version 19.1.7
Debugger Version: lldb version 19.1.7
Operating System Version: Ubuntu 22.02
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs