IBM Support

LI74345: INCORRECT SIZEOF OPERATOR OUTPUT

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • When compiling the following test case, the result of the sizeof
    operator inside the template class is incorrect.
    
    
    -------------------------------------
    
    To Compile:  xlC test.C
    
    ============  TEST CASE  ============
    
    extern "C" int printf(const char * , ...);
    
    template <class type>
    struct tempfoo {
        enum { SIZE = sizeof(type) };
    };
    
    struct foo {
        struct Values {
            double V1,V2,V3,V4;
        };
    
        typedef tempfoo<Values> Some_type;
        Some_type Null_T;
    
        typedef tempfoo<Values> Some_type2;
    
        struct Values2 { Some_type2 Var_name; };
    };
    
    int main() {
        printf("SIZE = %d, should be %d\n", foo::Some_type2::SIZE,
    sizeof(foo::Values));
    
        return 1;
    }
    

Local fix

Problem summary

  • USER AFFECTED:
    Users creating classes with multiple templated variables, of the
    same type, that get instantiated more than once in a class (ie,
    the template class uses a template parameter to calculate
    sizeof).
    
    PROBLEM DESCRIPTION:
    Compiler incorrectly returns information about the template
    parameter which is not yet fully instantiated (ie, sizeof will
    return nonsense rather than the actual size).
    

Problem conclusion

  • Fixed how templates are instantiated so that this scenario is
    considered, and correct program output is observed.
    

Temporary fix

Comments

APAR Information

  • APAR number

    LI74345

  • Reported component name

    XL C/C++ RHEL52

  • Reported component ID

    5724U8310

  • Reported release

    A10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2009-03-31

  • Closed date

    2009-03-31

  • Last modified date

    2009-03-31

  • APAR is sysrouted FROM one or more of the following:

    LI74299

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    XL C/C++ RHEL52

  • Fixed component ID

    5724U8310

Applicable component levels

[{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SSJT9L","label":"XL C\/C++"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"A.1","Line of Business":{"code":"LOB08","label":"Cognitive Systems"}}]

Document Information

Modified date:
16 October 2021