<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/130484>130484</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Question] Is (volatile long double) 0 output from 'ta v' command a bug?
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          kaixinlalala
      </td>
    </tr>
</table>

<pre>
    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
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcWktz47i1_jXw5pRVAEiK5MILSmrN7aqumjt1-yaVlQoiYQlpimBAULazyG9P4cGnZFvOzDiTqLssCueB8_hwcACJNY04VJw_oGiFos0da_VRqocfTDyLqmTm391eFi8Pfz7yCtpGVAfQRw5oiTWDM1piyOXpxKoCRAXfvm1WiK4th2x13Wp4lAoYnJkSbF9yEI0RRTQ5y5JpUXIoZXWAQrb7kiOaAkZLvICvwE5QSQ1NqziIR9BH0Rhh_lzzXPMC9vzIzkIqsPprqXmlBSth3x6MBY2Er_Ak27KAUvzgoCXksnoU6gRPQh-thQU_81LWXDULhDOEs--80bBmDUdftmi1Rmnmxo3F7j_OEA1ElZdtwVGwfmyrXAtZsRIFX-ZE3dYlvzJuY1HpaxIvNd9pxYRurlBZ9XJltNWiFPoaRchGK85OnoSzvGRNA2tZaSYqrnYEULxCOKuVODPNUWCYAADayoKigPzIFJz4ac_VLkKBZW73pcjf4Q0dr2dBdIvo1kzcaNXmWipPGJmCaHJd0-7MSpPQ6zY5aur12cmCbLCCJlM1qdHU-9NTOzU2HvFmavaGz6z-x9TsiZz527k-Dze1trn4XcvCLLB2Xdg_3sql02xobrl0hHggjNV6KiEfTQZFNLmcvUvEbG4_PMpA9_rt8jkN-FzTXHZmTB-9XnJ5CYZ4oMaXVHLDtB_GDn0LO0OWPHcADk7iVJf8xCvNTN25grLgYyh7LCXTnS_JawhLXyMQ_FFwBYgm00mvAyu9PkzwfwrgkkEyuYRUOlDTK4DDA7nz-OMIC95CmMuB2cCMoaLSUO-wi4RDyoCOM1NBEAEKNoAX0aOx0w4t7RAZD8V2iJqhHjFGtyUmlljvMCC6gsZAON_lrNFms3IbIk2cGmNIcMWK1KroDKKr3pDucVQLTefhXRPOeBSs7OMaLG6NFKIr0cVoSOIwY4itaDByMiR2KBwPUTsUTfyeKQreNX14TKdaTHBo5tSEVg2iS5OunmvAheK6VZVX7rPtko8zzU91aXd622pU7MThO3H9wagNs6iwEPxOHCrWDh8E0bVnqU39moLFJRSuNXbWnKVH0MjsuciIO_ZgoTYqZu5bpJKRlAtYPClQ4hE8xgznFyDY2HOR__dcGWCYXJp3gwKPKu8nzWw4rymYyxHvH-n9S9-e-DuxcnSy9KzhHzN4QO-A2LR7Cnu14Ttx6NeDx3FXfyy20kmqJumy838Bej1dtzgQdQ4YVTQzZWtq6i1Klr0Ss4S3QMdgvlVJ3CtZwr2z6H0lQwkIk6ECkPcFbcQ70bQTtRm4CLetWD4jiGZ2skkl7l5DAj3bjGe0TV0rTPO65Peyn0q5Z2V_VmwQzvpN2wbR7yQR9qnrqT3Ba-4_x5eMPhYR9itg3DrZcbM1d5saXUTmLXBvpiaugeI-JhOrul5olu-oa8AN34mJyu3Kk9LpA_BN5mP_oa0Lps2J-3AZGZ-GCDtgEzxCoguF24ovxh38govxZISNPpAdlbiCFc6lCOmXsd0wXAAXozZm3SWie-qp6QRaU5oD17RFmDRwfbMwFXJVyIR8rLsvI-PZbUG5tHdeW64jkPgNH8_W_wUiSV84bUboyq-YHn6vS4avSg5-zirHpYu2T3mLyWc2epvLgWN50d9c45pmzdWfPlsEXxSUEb6mol3Er-V6Ch4Ub4CXDZ_lzi-rrNRcVUyLM4d9KfMfr9UmPKlL40sfnH0_clC8aUsNtRKVvYJ6gbIs9m9eFiWWg6agmTpwDbniTHNAlC4Q3WreaOMt3-GFRJSactQqxSsN_JnnrbZ3Zg3XoCUgGiO6PcoTN29_f0J0W_B9ezhwdW8UIbo98GpXK3loEN2SOMQxTcKU7lY_JdH_BOkB0a3iRZvzYtfPfGmF6UiS52S5W4aIpoupG_tureNspTj7UUuDV2IOTU9HrrhN41ThEl_pLQPfSLrcdtd_a1eg16P7QAN1SoDpida8rlGQJRQFma3MrCgUbxrXYT7j0YuE-2jqgjkp_a-SueGnKU7iCErWVvmRF8aNf0-YL21qtKxrXljbM9BHxVkBiAamCQfburt6Hc_12utPLWtQnDWysmz7Ua4WpDsgKauFBtj47cIWda9wH308j_ZMsvG7pW1PNmajsR8oCjZ2O03fTKY1LU7t8vRrOcG3dVZXThgJAUA4uze1PqGvqLnp1JEE70u_evow8qG1xDxFXtM7h5FJ8YAzwtm8QfJH3N8brHldg6g-YSLp7qXcod0GIshQkM3aFhcZWR2mHKMWxXJMNlREs5m-ZFQrOswnOPbCk0uUiZxvoT02Jxdsdjn2d8rd8kTR-pmEfl1O2htHrCzJ3UBN9lFzQhkNpt3VyniQ9NcTw741dX1m_tAVTjkv4zlqLC1rowtHFLLZ7U3y7KevlbBz9OTdTkhRCe1cDNaiyuWpLrnmoF9qu_W9qYp2X2Uks2-GRqkm_j5nskjqrgbY0de_X5oIVb9z4W00r0Geubqp5j6ST665wVBzf32VNU__eo11NfrTq6xhXb5xfr756mcEqkdly_WosUnd3cuwVPsSV_vK0Ve2sQgdrfkxaMF6-YfBbRTgT8ZthIIs_dWQ--22dQfez4acURTfrujNW8ckuVR08-3jCJt_KFyG7JNxuRzh8tNLmQPhfxeyjHwK8Ln1tfYWfKSR-Juryb-0Qtsru2_fNit4EmUJP8wfWXGQCk5Scajd-uDNAjYSXmRrAF6WL_DEKnvStwz-NBqt_oLotkLRBl4ubyXW8lSL0n4X3P0O543riLxkpstbmVTPG_z7nzHcy-lygfvDa1Ny-BNXjZCVMdLqhbMbAJIuyCJGONv4A8KY1YTrkvPnmit30_l_L43mp7HE_-_bSrdA6QLTu-IhKNIgZXf8gcQhiUgSh-Hd8eExyveEcZKkLIx4TEhOo2WSpwUu8GO0D-_EA8U0wgFOCSGUhgucL6NknyZ5GOTLIghRiPmJiXJRlufTQqrDnWialj-QAIdJeFeyPS8b-yspSiv-BJZqutVoc6cejND9vj00KMSlaHQzqNFCl_bnVb-0vLFf2kcb-NrAW9Dqfzyl5MlWRnP-o3H_Uytmf-YUbO9aVT4cta4b0xzb266D0Md2v8jlCdGtMcK_3ddK_pXn5qBmTbenNOfb-YH-MwAA__8pGPEP">