TClass and cling disagree on the size of the class

I’ve simplified the failing invocation of rootcling to

/rootsys/bin/rootcling -v0 \
"--lib-list-prefix=/tripoli4/resources/depletion/DepletedComposition_C_ACLiC_map" \
-f "/tripoli4/resources/depletion/DepletedComposition_C_ACLiC_dict.cxx" \
-I$ROOTSYS/include -I"/rootsys/etc/" \
-I"/rootsys/etc//cling" \
-I"/rootsys/include/" \
-I"/spackroot/python-3.9.0-qv6qdkmv5i5ccq5ck6mc2uhrwspxcg4w/include/python3.9" \
-I"/spackroot/python-3.8.10-dpdcewvuzki5skfolytrbudpyzljmmvk/include/python3.8" \
-I"/data/tmpdm2s/dm232107/src/valjean/" \
-D__ACLIC__  \
"/tripoli4/resources/depletion/DepletedComposition.C" \
"/tripoli4/resources/depletion/DepletedComposition_C_ACLiC_linkdef.h"

Questions:

  1. Is $ROOTSYS indeed /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/root-6.22.06-v66qm7x4q5zzkgkzyf5oj43jnra5zgsx/?
  2. What does ldd /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/root-6.22.06-v66qm7x4q5zzkgkzyf5oj43jnra5zgsx/bin/rootcling say, are these libraries from the ROOT installation you expect to see?
  3. And why are there two Python include paths?

Yes.

Looks fine to me:

% ldd $ROOTSYS/bin/rootcling
        linux-vdso.so.1 =>  (0x00002b5086c45000)
        libRIO.so.6.22 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/root-6.22.06-v66qm7x4q5zzkgkzyf5oj43jnra5zgsx/lib/libRIO.so.6.22 (0x00002b5086e47000)
        libCling.so.6.22 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/root-6.22.06-v66qm7x4q5zzkgkzyf5oj43jnra5zgsx/lib/libCling.so.6.22 (0x00002b50873d0000)
        libThread.so.6.22 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/root-6.22.06-v66qm7x4q5zzkgkzyf5oj43jnra5zgsx/lib/libThread.so.6.22 (0x00002b508b76e000)
        libCore.so.6.22 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/root-6.22.06-v66qm7x4q5zzkgkzyf5oj43jnra5zgsx/lib/libCore.so.6.22 (0x00002b508b9c3000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b508c019000)
        libstdc++.so.6 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-4.8.5/gcc-7.5.0-kg4dkgyifmgrr5wagicqv6vqaubc6lcs/lib64/libstdc++.so.6 (0x00002b508c235000)
        libm.so.6 => /lib64/libm.so.6 (0x00002b508c5b8000)
        libgcc_s.so.1 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-4.8.5/gcc-7.5.0-kg4dkgyifmgrr5wagicqv6vqaubc6lcs/lib64/libgcc_s.so.1 (0x00002b508c8ba000)
        libc.so.6 => /lib64/libc.so.6 (0x00002b508cad1000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002b508ce9f000)
        /lib64/ld-linux-x86-64.so.2 (0x00002b5086c23000)
        librt.so.1 => /lib64/librt.so.1 (0x00002b508d0a3000)
        libtinfo.so.6 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/ncurses-6.2-i566fo5tenq5ndrfebhzczm2h563wjj2/lib/libtinfo.so.6 (0x00002b508d2ab000)
        libz.so.1 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/zlib-1.2.11-xtojkomxktl4gysx6s37ctx5n5oamvsi/lib/libz.so.1 (0x00002b508d4e7000)
        libpcre.so.1 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/pcre-8.44-vxtgtvw2dgvndoowbyguxmcw4jd7epfy/lib/libpcre.so.1 (0x00002b508d6fe000)
        liblzma.so.5 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/xz-5.2.5-aldx5z3j7kifz5arusv6mit6lnaixrca/lib/liblzma.so.5 (0x00002b508d942000)
        libxxhash.so.0 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/xxhash-0.7.4-2cvgzoy25tevumakiyuyykma6hu2xamx/lib/libxxhash.so.0 (0x00002b508db68000)
        liblz4.so.1 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/lz4-1.9.3-4e7vufjl2vsoopkedkut4uyqvhvki2oo/lib/liblz4.so.1 (0x00002b508dd77000)
        libzstd.so.1 => /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-7.5.0/zstd-1.4.9-kmum4laztsibujfnzv6eh44ffyp4ekje/lib64/libzstd.so.1 (0x00002b508dfb0000)

I think I accidentally sourced two Python modules. I am fixing the environment now.

Thanks.

If you start root, what’s the output of sizeof(TClassRef)? What’s the output of

struct AXEL {std::string a; void ** b; };
sizeof(AXEL)

To exclude that mylib.C causes any issues, does this happen with any source file you try to ACLiC (.L src.C++)? Can you show the minimal source file that reproduces this issue?

Axel, thanks for following up.

root [0] sizeof(TClassRef)
(unsigned long) 40
root [1] struct AXEL {std::string a; void ** b; };
root [2] sizeof(AXEL)
(unsigned long) 40

The following file is sufficient to reproduce the issue!

#include "TObject.h"

struct Test : public TObject {
};

OK good. We’re simulating TClassRef here, 40 is what I expect, 16 is not what I expect.

After loading your library (that issues the warnings), could you run this on the ROOT prompt and send the output:

.rawInput
void TCling__DEBUG__decl_dump(void* D);
.rawInput
TCling__DEBUG__decl_dump((void*)(gInterpreter->ClassInfo_Tagnum(TClass::GetClass("TClassRef")->GetClassInfo())));

Here we go:

root [0] .L valjean/eponine/tripoli4/resources/depletion/DepletedComposition.C++O
Info in <TUnixSystem::ACLiC>: creating shared library /data/tmpdm2s/dm232107/src/valjean/./valjean/eponine/tripoli4/resources/depletion/DepletedComposition_C.so
Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TBaseClass, respectively 152 128

Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TClassRef, respectively 40 16

Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TClassRef, respectively 40 16

root [1] .rawInput
Using raw input
root [2] void TCling__DEBUG__decl_dump(void* D);
root [3] .rawInput
Not using raw input
root [4] TCling__DEBUG__decl_dump((void*)(gInterpreter->ClassInfo_Tagnum(TClass::GetClass("TClassRef")->GetClassInfo())));
CXXRecordDecl 0x49a64e0 </volatile/dm232107/spack/stage/spack-stage-root-6.22.06-v66qm7x4q5zzkgkzyf5oj43jnra5zgsx/spack-build-v66qm7x/include/TClassRef.h:28:1, line:76:1> line:28:7 imported referenced class TClassRef definition
|-DefinitionData standard_layout has_user_declared_ctor can_const_default_init
| |-DefaultConstructor exists non_trivial user_provided
| |-CopyConstructor non_trivial user_declared has_const_param needs_overload_resolution implicit_has_const_param
| |-MoveConstructor needs_overload_resolution
| |-CopyAssignment non_trivial has_const_param user_declared implicit_has_const_param
| |-MoveAssignment needs_overload_resolution
| `-Destructor non_trivial user_declared needs_overload_resolution
|-CXXRecordDecl 0x49c8268 <col:1, col:7> col:7 imported implicit referenced class TClassRef
|-AccessSpecDecl 0x49c8328 <line:30:1, col:8> col:1 imported private
|-FriendDecl 0x49c8358 <line:38:4, col:17> col:11 imported 'class TClass':'class TClass'
|-CXXMethodDecl 0x49c83e8 <line:40:4, col:33> col:9 imported used Assign 'void (const class TClassRef &)'
| `-ParmVarDecl 0x49c84f0 <col:16, col:32> col:33 imported 'const class TClassRef &'
|-CXXMethodDecl 0x49c8598 <line:41:4, col:24> col:9 imported used Assign 'void (class TClass *)'
| `-ParmVarDecl 0x49c8638 <col:16, col:23> col:24 imported 'class TClass *'
|-CXXMethodDecl 0x49c86e0 <line:42:4, col:33> col:14 imported used InternalGetClass 'class TClass *(void) const'
|-AccessSpecDecl 0x49c87a0 <line:43:1, col:7> col:1 imported public
|-CXXConstructorDecl 0x49c87d0 <line:44:4, col:46> col:4 imported used TClassRef 'void (void)'
| |-CXXCtorInitializer Field 0x49a6a48 'fClassName' 'std::string':'class std::__cxx11::basic_string<char>'
| | `-CXXConstructExpr 0x5725648 <col:18, col:29> 'std::string':'class std::__cxx11::basic_string<char>' 'void (void) noexcept(is_nothrow_default_constructible<class allocator<char> >::value)'
| |-CXXCtorInitializer Field 0x49a6b60 'fClassPtr' 'class TClass *const *'
| | `-ImplicitCastExpr 0x57256c0 <col:42> 'class TClass *const *' <NullToPointer>
| |   `-IntegerLiteral 0x57256a0 <col:42> 'int' 0
| `-CompoundStmt 0x5725700 <col:45, col:46>
|-CXXConstructorDecl 0x49c88c0 <line:45:4, col:24> col:4 imported used TClassRef 'void (class TClass *)'
| `-ParmVarDecl 0x49c8970 <col:14, col:22> col:22 imported cl 'class TClass *'
|-CXXConstructorDecl 0x49c8a18 <line:46:4, col:35> col:4 imported used TClassRef 'void (const char *)'
| `-ParmVarDecl 0x49c8ac8 <col:14, col:26> col:26 imported classname 'const char *'
|-CXXConstructorDecl 0x49c8b78 <line:47:4, col:30> col:4 imported used TClassRef 'void (const class TClassRef &)'
| `-ParmVarDecl 0x49c8c28 <col:14, col:29> col:30 imported 'const class TClassRef &'
|-CXXMethodDecl 0x49c8cd0 <line:48:4, line:54:4> line:48:22 imported used operator= 'class TClassRef &(const class TClassRef &)' inline
| |-ParmVarDecl 0x49c8de0 <col:32, col:49> col:49 imported used rhs 'const class TClassRef &'
| `-CompoundStmt 0x5725ba0 <col:54, line:54:4>
|   |-IfStmt 0x5725b68 <line:50:7, line:52:7>
|   | |-<<<NULL>>>
|   | |-<<<NULL>>>
|   | |-BinaryOperator 0x5725b40 <line:50:11, col:72> '_Bool' '&&'
|   | | |-BinaryOperator 0x5725b18 <col:11, col:20> '_Bool' '!='
|   | | | |-ImplicitCastExpr 0x5725b00 <col:11> 'const class TClassRef *' <NoOp>
|   | | | | `-CXXThisExpr 0x5725ae8 <col:11> 'class TClassRef *' this
|   | | | `-UnaryOperator 0x5725aa0 <col:19, col:20> 'const class TClassRef *' prefix '&'
|   | | |   `-DeclRefExpr 0x5725a78 <col:20> 'const class TClassRef' lvalue ParmVar 0x49c8de0 'rhs' 'const class TClassRef &'
|   | | `-ParenExpr 0x5725a58 <col:27, col:72> '_Bool'
|   | |   `-BinaryOperator 0x5725a30 <col:28, col:63> '_Bool' '||'
|   | |     |-BinaryOperator 0x5725a08 <col:28, col:41> '_Bool' '=='
|   | |     | |-ImplicitCastExpr 0x57259f0 <col:28> 'class TClass *const *' <LValueToRValue>
|   | |     | | `-MemberExpr 0x57259b8 <col:28> 'class TClass *const *' lvalue ->fClassPtr 0x49a6b60
|   | |     | |   `-CXXThisExpr 0x57259a0 <col:28> 'class TClassRef *' this
|   | |     | `-ImplicitCastExpr 0x5725988 <col:41> 'class TClass *const *' <NullToPointer>
|   | |     |   `-IntegerLiteral 0x5725968 <col:41> 'int' 0
|   | |     `-BinaryOperator 0x5725940 <col:46, col:63> '_Bool' '!='
|   | |       |-ImplicitCastExpr 0x5725928 <col:46> 'class TClass *const *' <LValueToRValue>
|   | |       | `-MemberExpr 0x57258f0 <col:46> 'class TClass *const *' lvalue ->fClassPtr 0x49a6b60
|   | |       |   `-CXXThisExpr 0x57258d8 <col:46> 'class TClassRef *' this
|   | |       `-ImplicitCastExpr 0x57258c0 <col:59, col:63> 'class TClass *const *' <LValueToRValue>
|   | |         `-MemberExpr 0x5725888 <col:59, col:63> 'class TClass *const *const' lvalue .fClassPtr 0x49a6b60
|   | |           `-DeclRefExpr 0x5725860 <col:59> 'const class TClassRef' lvalue ParmVar 0x49c8de0 'rhs' 'const class TClassRef &'
|   | |-CompoundStmt 0x5725840 <col:75, line:52:7>
|   | | `-CXXMemberCallExpr 0x5725808 <line:51:10, col:26> 'void'
|   | |   |-MemberExpr 0x57257d0 <col:10, col:16> '<bound member function type>' ->Assign 0x49c83e8
|   | |   | `-CXXThisExpr 0x57257b8 <col:10> 'class TClassRef *' this
|   | |   `-DeclRefExpr 0x5725790 <col:23> 'const class TClassRef' lvalue ParmVar 0x49c8de0 'rhs' 'const class TClassRef &'
|   | `-<<<NULL>>>
|   `-ReturnStmt 0x5725778 <line:53:7, col:15>
|     `-UnaryOperator 0x5725758 <col:14, col:15> 'class TClassRef' lvalue prefix '*'
|       `-CXXThisExpr 0x5725718 <col:15> 'class TClassRef *' this
|-CXXMethodDecl 0x49c8e88 <line:55:4, line:61:4> line:55:22 imported used operator= 'class TClassRef &(class TClass *)' inline
| |-ParmVarDecl 0x49c8f60 <col:32, col:40> col:40 imported used rhs 'class TClass *'
| `-CompoundStmt 0x5725f50 <col:45, line:61:4>
|   |-IfStmt 0x5725f18 <line:57:7, line:59:7>
|   | |-<<<NULL>>>
|   | |-<<<NULL>>>
|   | |-BinaryOperator 0x5725ef0 <line:57:12, col:56> '_Bool' '||'
|   | | |-BinaryOperator 0x5725ec8 <col:12, col:29> '_Bool' '=='
|   | | | |-ImplicitCastExpr 0x5725eb0 <col:12, col:18> 'class TClass *const *' <LValueToRValue>
|   | | | | `-MemberExpr 0x5725e78 <col:12, col:18> 'class TClass *const *' lvalue ->fClassPtr 0x49a6b60
|   | | | |   `-CXXThisExpr 0x5725e60 <col:12> 'class TClassRef *' this
|   | | | `-ImplicitCastExpr 0x5725e48 <col:29> 'class TClass *const *' <NullToPointer>
|   | | |   `-IntegerLiteral 0x5725e28 <col:29> 'int' 0
|   | | `-BinaryOperator 0x5725e00 <col:34, col:56> '_Bool' '!='
|   | |   |-ImplicitCastExpr 0x5725de8 <col:34, col:51> 'class TClass *' <LValueToRValue>
|   | |   | `-UnaryOperator 0x5725dc8 <col:34, col:51> 'class TClass *const' lvalue prefix '*'
|   | |   |   `-ImplicitCastExpr 0x5725db0 <col:35, col:51> 'class TClass *const *' <LValueToRValue>
|   | |   |     `-ParenExpr 0x5725d90 <col:35, col:51> 'class TClass *const *' lvalue
|   | |   |       `-MemberExpr 0x5725d58 <col:36, col:42> 'class TClass *const *' lvalue ->fClassPtr 0x49a6b60
|   | |   |         `-CXXThisExpr 0x5725d40 <col:36> 'class TClassRef *' this
|   | |   `-ImplicitCastExpr 0x5725d28 <col:56> 'class TClass *' <LValueToRValue>
|   | |     `-DeclRefExpr 0x5725d00 <col:56> 'class TClass *' lvalue ParmVar 0x49c8f60 'rhs' 'class TClass *'
|   | |-CompoundStmt 0x5725ce0 <col:61, line:59:7>
|   | | `-CXXMemberCallExpr 0x5725ca8 <line:58:10, col:26> 'void'
|   | |   |-MemberExpr 0x5725c70 <col:10, col:16> '<bound member function type>' ->Assign 0x49c8598
|   | |   | `-CXXThisExpr 0x5725c58 <col:10> 'class TClassRef *' this
|   | |   `-ImplicitCastExpr 0x5725c40 <col:23> 'class TClass *' <LValueToRValue>
|   | |     `-DeclRefExpr 0x5725c18 <col:23> 'class TClass *' lvalue ParmVar 0x49c8f60 'rhs' 'class TClass *'
|   | `-<<<NULL>>>
|   `-ReturnStmt 0x5725c00 <line:60:7, col:15>
|     `-UnaryOperator 0x5725be0 <col:14, col:15> 'class TClassRef' lvalue prefix '*'
|       `-CXXThisExpr 0x5725bc8 <col:15> 'class TClassRef *' this
|-CXXDestructorDecl 0x49c9008 <line:63:4, col:19> col:4 imported used ~TClassRef 'void (void) throw()'
| `-CompoundStmt 0x5725f78 <col:17, col:19>
|-CXXMethodDecl 0x49c9100 <line:65:4, line:68:4> line:65:9 imported SetName 'void (const char *)'root.exe: /volatile/dm232107/spack/stage/spack-stage-root-6.22.06-v66qm7x4q5zzkgkzyf5oj43jnra5zgsx/spack-src/interpreter/cling/lib/Interpreter
/Transaction.cpp:138: void cling::Transaction::append(cling::Transaction::DelayCallInfo): Assertion `getState() == kCollecting && "Cannot append declarations in current state."' failed.
[1]    13972 abort      root.exe -l

:open_mouth:

Hi @Axel, sorry to ping… any suggestion to solve this? Thank you.

1 Like

Just checking - that’s the output you’re getting after you see

Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TClassRef, respectively 40 16

Correct.

I edited post #10 to show the full session.

Try to start ROOT using “root -n” (maybe you have a “rootlogon.C” or “.rootrc” file which creates problems).

root -n does not help, unfortunately.

I’m wondering: ldd rootcling shows the path to libstdc++.so.6 that was installed with gcc 7.5.0. However, it seems that this library was (at least partly) compiled with gcc 4.8.5:

$ readelf -p .comment /data/tmpdm2s/valjean/product/spack/opt/spack/linux-centos7-x86_64/gcc-4.8.5/gcc-7.5.0-kg4dkgyifmgrr5wagicqv6vqaubc6lcs/lib64/libstdc++.so.6       

String dump of section '.comment':
  [     0]  GCC: (Spack GCC) 7.5.0
  [    17]  GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44)

gcc 4.8.5 and 7.5.0 have different ABIs by default. Can this lead to problems?

For information, I recompiled gcc 7.5.0 using gcc 7.5.0, recompiled root with that, didn’t help.

Thanks. Can you please apply the following patch:

diff --git a/core/metacling/src/TCling.cxx b/core/metacling/src/TCling.cxx
index 7476c7d9ab..a70ff17ee1 100644
--- a/core/metacling/src/TCling.cxx
+++ b/core/metacling/src/TCling.cxx
@@ -227,7 +227,12 @@ R__DLLEXPORT void TCling__DEBUG__dump(clang::Decl* D) {
 R__DLLEXPORT void TCling__DEBUG__dump(clang::FunctionDecl* FD) {
    return FD->dump();
 }
+
+cling::Interpreter* TCling__GetInterpreter() {
+   return ((TCling*)gCling)->GetInterpreterImpl();
+}
 R__DLLEXPORT void TCling__DEBUG__decl_dump(void* D) {
+   cling::Interpreter::PushTransactionRAII deserRAII(TCling__GetInterpreter());
    return ((clang::Decl*)D)->dump();
 }
 R__DLLEXPORT void TCling__DEBUG__printName(clang::Decl* D) {

rebuild ROOT (just make -j8 Cling is enough) and post the full output again?

1 Like

Here we go:

root [0] .L /home/dm232107/src/valjean/valjean/eponine/tripoli4/resources/depletion/DepletedComposition.C++O
Info in <TUnixSystem::ACLiC>: creating shared library /home/dm232107/src/valjean/valjean/eponine/tripoli4/resources/depletion/DepletedComposition_C.so
Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TBaseClass, respectively 152 128

Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TClassRef, respectively 40 16

Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TClassRef, respectively 40 16

root [1] .rawInput
Using raw input
root [2] void TCling__DEBUG__decl_dump(void* D);
root [3] .rawInput
Not using raw input
root [4] TCling__DEBUG__decl_dump((void*)(gInterpreter->ClassInfo_Tagnum(TClass::GetClass("TClassRef")->GetClassInfo())));
CXXRecordDecl 0x2b0d1c0 </volatile/dm232107/spack/stage/spack-stage-root-6.22.06-5m5dji7jlm3usbupgo4mcatrivj2mtjd/spack-build-5m5dji7/include/TClassRef.h:28:1, line:76:1> line:28:7 imported referenced class TClassRef definition
|-DefinitionData standard_layout has_user_declared_ctor can_const_default_init
| |-DefaultConstructor exists non_trivial user_provided
| |-CopyConstructor non_trivial user_declared has_const_param needs_overload_resolution implicit_has_const_param
| |-MoveConstructor needs_overload_resolution
| |-CopyAssignment non_trivial has_const_param user_declared implicit_has_const_param
| |-MoveAssignment needs_overload_resolution
| `-Destructor non_trivial user_declared needs_overload_resolution
|-CXXRecordDecl 0x2b2edb8 <col:1, col:7> col:7 imported implicit referenced class TClassRef
|-AccessSpecDecl 0x2b2ee78 <line:30:1, col:8> col:1 imported private
|-FriendDecl 0x2b2eea8 <line:38:4, col:17> col:11 imported 'class TClass':'class TClass'
|-CXXMethodDecl 0x2b2ef38 <line:40:4, col:33> col:9 imported used Assign 'void (const class TClassRef &)'
| `-ParmVarDecl 0x2b2f040 <col:16, col:32> col:33 imported 'const class TClassRef &'
|-CXXMethodDecl 0x2b2f0e8 <line:41:4, col:24> col:9 imported used Assign 'void (class TClass *)'
| `-ParmVarDecl 0x2b2f188 <col:16, col:23> col:24 imported 'class TClass *'
|-CXXMethodDecl 0x2b2f230 <line:42:4, col:33> col:14 imported used InternalGetClass 'class TClass *(void) const'
|-AccessSpecDecl 0x2b2f2f0 <line:43:1, col:7> col:1 imported public
|-CXXConstructorDecl 0x2b2f320 <line:44:4, col:46> col:4 imported used TClassRef 'void (void)'
| |-CXXCtorInitializer Field 0x2b0d728 'fClassName' 'std::string':'class std::__cxx11::basic_string<char>'
| | `-CXXConstructExpr 0x3883f78 <col:18, col:29> 'std::string':'class std::__cxx11::basic_string<char>' 'void (void) noexcept(is_nothrow_default_constructible<class allocator<char> >::value)'
| |-CXXCtorInitializer Field 0x2b0d840 'fClassPtr' 'class TClass *const *'
| | `-ImplicitCastExpr 0x3883ff0 <col:42> 'class TClass *const *' <NullToPointer>
| |   `-IntegerLiteral 0x3883fd0 <col:42> 'int' 0
| `-CompoundStmt 0x3884030 <col:45, col:46>
|-CXXConstructorDecl 0x2b2f410 <line:45:4, col:24> col:4 imported used TClassRef 'void (class TClass *)'
| `-ParmVarDecl 0x2b2f4c0 <col:14, col:22> col:22 imported cl 'class TClass *'
|-CXXConstructorDecl 0x2b2f568 <line:46:4, col:35> col:4 imported used TClassRef 'void (const char *)'
| `-ParmVarDecl 0x2b2f618 <col:14, col:26> col:26 imported classname 'const char *'
|-CXXConstructorDecl 0x2b2f6c8 <line:47:4, col:30> col:4 imported used TClassRef 'void (const class TClassRef &)'
| `-ParmVarDecl 0x2b2f778 <col:14, col:29> col:30 imported 'const class TClassRef &'
|-CXXMethodDecl 0x2b2f820 <line:48:4, line:54:4> line:48:22 imported used operator= 'class TClassRef &(const class TClassRef &)' inline
| |-ParmVarDecl 0x2b2f930 <col:32, col:49> col:49 imported used rhs 'const class TClassRef &'
| `-CompoundStmt 0x38844d0 <col:54, line:54:4>
|   |-IfStmt 0x3884498 <line:50:7, line:52:7>
|   | |-<<<NULL>>>
|   | |-<<<NULL>>>
|   | |-BinaryOperator 0x3884470 <line:50:11, col:72> '_Bool' '&&'
|   | | |-BinaryOperator 0x3884448 <col:11, col:20> '_Bool' '!='
|   | | | |-ImplicitCastExpr 0x3884430 <col:11> 'const class TClassRef *' <NoOp>
|   | | | | `-CXXThisExpr 0x3884418 <col:11> 'class TClassRef *' this
|   | | | `-UnaryOperator 0x38843d0 <col:19, col:20> 'const class TClassRef *' prefix '&'
|   | | |   `-DeclRefExpr 0x38843a8 <col:20> 'const class TClassRef' lvalue ParmVar 0x2b2f930 'rhs' 'const class TClassRef &'
|   | | `-ParenExpr 0x3884388 <col:27, col:72> '_Bool'
|   | |   `-BinaryOperator 0x3884360 <col:28, col:63> '_Bool' '||'
|   | |     |-BinaryOperator 0x3884338 <col:28, col:41> '_Bool' '=='
|   | |     | |-ImplicitCastExpr 0x3884320 <col:28> 'class TClass *const *' <LValueToRValue>
|   | |     | | `-MemberExpr 0x38842e8 <col:28> 'class TClass *const *' lvalue ->fClassPtr 0x2b0d840
|   | |     | |   `-CXXThisExpr 0x38842d0 <col:28> 'class TClassRef *' this
|   | |     | `-ImplicitCastExpr 0x38842b8 <col:41> 'class TClass *const *' <NullToPointer>
|   | |     |   `-IntegerLiteral 0x3884298 <col:41> 'int' 0
|   | |     `-BinaryOperator 0x3884270 <col:46, col:63> '_Bool' '!='
|   | |       |-ImplicitCastExpr 0x3884258 <col:46> 'class TClass *const *' <LValueToRValue>
|   | |       | `-MemberExpr 0x3884220 <col:46> 'class TClass *const *' lvalue ->fClassPtr 0x2b0d840
|   | |       |   `-CXXThisExpr 0x3884208 <col:46> 'class TClassRef *' this
|   | |       `-ImplicitCastExpr 0x38841f0 <col:59, col:63> 'class TClass *const *' <LValueToRValue>
|   | |         `-MemberExpr 0x38841b8 <col:59, col:63> 'class TClass *const *const' lvalue .fClassPtr 0x2b0d840
|   | |           `-DeclRefExpr 0x3884190 <col:59> 'const class TClassRef' lvalue ParmVar 0x2b2f930 'rhs' 'const class TClassRef &'
|   | |-CompoundStmt 0x3884170 <col:75, line:52:7>
|   | | `-CXXMemberCallExpr 0x3884138 <line:51:10, col:26> 'void'
|   | |   |-MemberExpr 0x3884100 <col:10, col:16> '<bound member function type>' ->Assign 0x2b2ef38
|   | |   | `-CXXThisExpr 0x38840e8 <col:10> 'class TClassRef *' this
|   | |   `-DeclRefExpr 0x38840c0 <col:23> 'const class TClassRef' lvalue ParmVar 0x2b2f930 'rhs' 'const class TClassRef &'
|   | `-<<<NULL>>>
|   `-ReturnStmt 0x38840a8 <line:53:7, col:15>
|     `-UnaryOperator 0x3884088 <col:14, col:15> 'class TClassRef' lvalue prefix '*'
|       `-CXXThisExpr 0x3884048 <col:15> 'class TClassRef *' this
|-CXXMethodDecl 0x2b2f9d8 <line:55:4, line:61:4> line:55:22 imported used operator= 'class TClassRef &(class TClass *)' inline
| |-ParmVarDecl 0x2b2fab0 <col:32, col:40> col:40 imported used rhs 'class TClass *'
| `-CompoundStmt 0x3884880 <col:45, line:61:4>
|   |-IfStmt 0x3884848 <line:57:7, line:59:7>
|   | |-<<<NULL>>>
|   | |-<<<NULL>>>
|   | |-BinaryOperator 0x3884820 <line:57:12, col:56> '_Bool' '||'
|   | | |-BinaryOperator 0x38847f8 <col:12, col:29> '_Bool' '=='
|   | | | |-ImplicitCastExpr 0x38847e0 <col:12, col:18> 'class TClass *const *' <LValueToRValue>
|   | | | | `-MemberExpr 0x38847a8 <col:12, col:18> 'class TClass *const *' lvalue ->fClassPtr 0x2b0d840
|   | | | |   `-CXXThisExpr 0x3884790 <col:12> 'class TClassRef *' this
|   | | | `-ImplicitCastExpr 0x3884778 <col:29> 'class TClass *const *' <NullToPointer>
|   | | |   `-IntegerLiteral 0x3884758 <col:29> 'int' 0
|   | | `-BinaryOperator 0x3884730 <col:34, col:56> '_Bool' '!='
|   | |   |-ImplicitCastExpr 0x3884718 <col:34, col:51> 'class TClass *' <LValueToRValue>
|   | |   | `-UnaryOperator 0x38846f8 <col:34, col:51> 'class TClass *const' lvalue prefix '*'
|   | |   |   `-ImplicitCastExpr 0x38846e0 <col:35, col:51> 'class TClass *const *' <LValueToRValue>
|   | |   |     `-ParenExpr 0x38846c0 <col:35, col:51> 'class TClass *const *' lvalue
|   | |   |       `-MemberExpr 0x3884688 <col:36, col:42> 'class TClass *const *' lvalue ->fClassPtr 0x2b0d840
|   | |   |         `-CXXThisExpr 0x3884670 <col:36> 'class TClassRef *' this
|   | |   `-ImplicitCastExpr 0x3884658 <col:56> 'class TClass *' <LValueToRValue>
|   | |     `-DeclRefExpr 0x3884630 <col:56> 'class TClass *' lvalue ParmVar 0x2b2fab0 'rhs' 'class TClass *'
|   | |-CompoundStmt 0x3884610 <col:61, line:59:7>
|   | | `-CXXMemberCallExpr 0x38845d8 <line:58:10, col:26> 'void'
|   | |   |-MemberExpr 0x38845a0 <col:10, col:16> '<bound member function type>' ->Assign 0x2b2f0e8
|   | |   | `-CXXThisExpr 0x3884588 <col:10> 'class TClassRef *' this
|   | |   `-ImplicitCastExpr 0x3884570 <col:23> 'class TClass *' <LValueToRValue>
|   | |     `-DeclRefExpr 0x3884548 <col:23> 'class TClass *' lvalue ParmVar 0x2b2fab0 'rhs' 'class TClass *'
|   | `-<<<NULL>>>
|   `-ReturnStmt 0x3884530 <line:60:7, col:15>
|     `-UnaryOperator 0x3884510 <col:14, col:15> 'class TClassRef' lvalue prefix '*'
|       `-CXXThisExpr 0x38844f8 <col:15> 'class TClassRef *' this
|-CXXDestructorDecl 0x2b2fb58 <line:63:4, col:19> col:4 imported used ~TClassRef 'void (void) throw()'
| `-CompoundStmt 0x38848a8 <col:17, col:19>
|-CXXMethodDecl 0x2b2fc50 <line:65:4, line:68:4> line:65:9 imported SetName 'void (const char *)'
| |-ParmVarDecl 0x2b2fcf0 <col:17, col:29> col:29 imported used new_name 'const char *'
| `-CompoundStmt 0x38855c8 <col:39, line:68:4>
|   |-IfStmt 0x3885590 <line:66:7, col:56>
|   | |-<<<NULL>>>
|   | |-<<<NULL>>>
|   | |-BinaryOperator 0x3885568 <col:12, col:39> '_Bool' '&&'
|   | | |-ImplicitCastExpr 0x3885550 <col:12> '_Bool' <PointerToBoolean>
|   | | | `-ImplicitCastExpr 0x3885538 <col:12> 'class TClass *const *' <LValueToRValue>
|   | | |   `-MemberExpr 0x3885500 <col:12> 'class TClass *const *' lvalue ->fClassPtr 0x2b0d840
|   | | |     `-CXXThisExpr 0x38854e8 <col:12> 'class TClassRef *' this
|   | | `-CXXOperatorCallExpr 0x3885498 <col:25, col:39> '_Bool'
|   | |   |-ImplicitCastExpr 0x3885420 <col:36> '_Bool (*)(const basic_string<char, struct std::char_traits<char>, class std::allocator<char> > &, const char *)' <FunctionToPointerDecay>
|   | |   | `-DeclRefExpr 0x3884f28 <col:36> '_Bool (const basic_string<char, struct std::char_traits<char>, class std::allocator<char> > &, const char *)' lvalue Function 0x3885148 'operator!=' '_Bool (const basic_string<char, struct std::char_traits<char>, class std::allocator<char> > &, const char *)'
|   | |   |-ImplicitCastExpr 0x3884f10 <col:25> 'const std::string':'const class std::__cxx11::basic_string<char>' lvalue <NoOp>
|   | |   | `-MemberExpr 0x3884ed8 <col:25> 'std::string':'class std::__cxx11::basic_string<char>' lvalue ->fClassName 0x2b0d728
|   | |   |   `-CXXThisExpr 0x3884ec0 <col:25> 'class TClassRef *' this
|   | |   `-ImplicitCastExpr 0x3884ea8 <col:39> 'const char *' <LValueToRValue>
|   | |     `-DeclRefExpr 0x3884e80 <col:39> 'const char *' lvalue ParmVar 0x2b2fcf0 'new_name' 'const char *'
|   | |-CXXMemberCallExpr 0x3884e58 <col:50, col:56> 'void'
|   | | `-MemberExpr 0x3884e20 <col:50> '<bound member function type>' ->Reset 0x2b2ff28
|   | |   `-CXXThisExpr 0x3884e08 <col:50> 'class TClassRef *' this
|   | `-<<<NULL>>>
|   `-CXXOperatorCallExpr 0x3884db8 <line:67:7, col:20> 'class std::__cxx11::basic_string<char>' lvalue
|     |-ImplicitCastExpr 0x3884d48 <col:18> 'class std::__cxx11::basic_string<char> &(*)(const char *)' <FunctionToPointerDecay>
|     | `-DeclRefExpr 0x3884950 <col:18> 'class std::__cxx11::basic_string<char> &(const char *)' lvalue CXXMethod 0x3884a00 'operator=' 'class std::__cxx11::basic_string<char> &(const char *)'
|     |-MemberExpr 0x3884918 <col:7> 'std::string':'class std::__cxx11::basic_string<char>' lvalue ->fClassName 0x2b0d728
|     | `-CXXThisExpr 0x3884900 <col:7> 'class TClassRef *' this
|     `-ImplicitCastExpr 0x38848e8 <col:20> 'const char *' <LValueToRValue>
|       `-DeclRefExpr 0x38848c0 <col:20> 'const char *' lvalue ParmVar 0x2b2fcf0 'new_name' 'const char *'
|-CXXMethodDecl 0x2b2fda0 <line:69:4, col:60> col:16 imported GetClassName 'const char *(void)'
| `-CompoundStmt 0x38857b0 <col:31, col:60>
|   `-ReturnStmt 0x3885798 <col:33, col:57>
|     `-CXXMemberCallExpr 0x3885770 <col:40, col:57> 'const char *'
|       `-MemberExpr 0x3885738 <col:40, col:51> '<bound member function type>' .c_str 0x1008be0
|         `-ImplicitCastExpr 0x3885720 <col:40> 'const class std::__cxx11::basic_string<char>' lvalue <NoOp>
|           `-MemberExpr 0x38856e8 <col:40> 'std::string':'class std::__cxx11::basic_string<char>' lvalue ->fClassName 0x2b0d728
|             `-CXXThisExpr 0x38856d0 <col:40> 'class TClassRef *' this
|-CXXMethodDecl 0x2b2fe68 <line:70:4, col:100> col:12 imported used GetClass 'class TClass *(void) const'
| `-CompoundStmt 0x3885ab0 <col:30, col:100>
|   `-ReturnStmt 0x3885a98 <col:32, col:97>
|     `-ConditionalOperator 0x3885a68 <col:39, col:97> 'class TClass *'
|       |-ParenExpr 0x3885a48 <col:39, col:63> '_Bool'
|       | `-BinaryOperator 0x3885a20 <col:40, col:54> '_Bool' '&&'
|       |   |-ImplicitCastExpr 0x3885a08 <col:40> '_Bool' <PointerToBoolean>
|       |   | `-ImplicitCastExpr 0x38859f0 <col:40> 'class TClass *const *' <LValueToRValue>
|       |   |   `-MemberExpr 0x38859b8 <col:40> 'class TClass *const *const' lvalue ->fClassPtr 0x2b0d840
|       |   |     `-CXXThisExpr 0x38859a0 <col:40> 'const class TClassRef *' this
|       |   `-ImplicitCastExpr 0x3885988 <col:53, col:54> '_Bool' <PointerToBoolean>
|       |     `-ImplicitCastExpr 0x3885970 <col:53, col:54> 'class TClass *' <LValueToRValue>
|       |       `-UnaryOperator 0x3885950 <col:53, col:54> 'class TClass *const' lvalue prefix '*'
|       |         `-ImplicitCastExpr 0x3885938 <col:54> 'class TClass *const *' <LValueToRValue>
|       |           `-MemberExpr 0x3885900 <col:54> 'class TClass *const *const' lvalue ->fClassPtr 0x2b0d840
|       |             `-CXXThisExpr 0x38858e8 <col:54> 'const class TClassRef *' this
|       |-ImplicitCastExpr 0x38858d0 <col:67, col:68> 'class TClass *' <LValueToRValue>
|       | `-UnaryOperator 0x38858b0 <col:67, col:68> 'class TClass *const' lvalue prefix '*'
|       |   `-ImplicitCastExpr 0x3885898 <col:68> 'class TClass *const *' <LValueToRValue>
|       |     `-MemberExpr 0x3885860 <col:68> 'class TClass *const *const' lvalue ->fClassPtr 0x2b0d840
|       |       `-CXXThisExpr 0x3885848 <col:68> 'const class TClassRef *' this
|       `-CXXMemberCallExpr 0x3885820 <col:80, col:97> 'class TClass *'
|         `-MemberExpr 0x38857e8 <col:80> '<bound member function type>' ->InternalGetClass 0x2b2f230
|           `-CXXThisExpr 0x38857d0 <col:80> 'const class TClassRef *' this
|-CXXMethodDecl 0x2b2ff28 <line:71:4, col:34> col:9 imported used Reset 'void (void)'
| `-CompoundStmt 0x3885b80 <col:17, col:34>
|   `-BinaryOperator 0x3885b58 <col:19, col:31> 'class TClass *const *' lvalue '='
|     |-MemberExpr 0x3885b20 <col:19> 'class TClass *const *' lvalue ->fClassPtr 0x2b0d840
|     | `-CXXThisExpr 0x3885b08 <col:19> 'class TClassRef *' this
|     `-ImplicitCastExpr 0x3885af0 <col:31> 'class TClass *const *' <NullToPointer>
|       `-IntegerLiteral 0x3885ad0 <col:31> 'int' 0
|-CXXMethodDecl 0x2b2ffe8 <line:73:4, col:101> col:12 imported used operator-> 'class TClass *(void) const'
| `-CompoundStmt 0x3885e80 <col:31, col:101>
|   `-ReturnStmt 0x3885e68 <col:33, col:98>
|     `-ConditionalOperator 0x3885e38 <col:40, col:98> 'class TClass *'
|       |-ParenExpr 0x3885e18 <col:40, col:64> '_Bool'
|       | `-BinaryOperator 0x3885df0 <col:41, col:55> '_Bool' '&&'
|       |   |-ImplicitCastExpr 0x3885dd8 <col:41> '_Bool' <PointerToBoolean>
|       |   | `-ImplicitCastExpr 0x3885dc0 <col:41> 'class TClass *const *' <LValueToRValue>
|       |   |   `-MemberExpr 0x3885d88 <col:41> 'class TClass *const *const' lvalue ->fClassPtr 0x2b0d840
|       |   |     `-CXXThisExpr 0x3885d70 <col:41> 'const class TClassRef *' this
|       |   `-ImplicitCastExpr 0x3885d58 <col:54, col:55> '_Bool' <PointerToBoolean>
|       |     `-ImplicitCastExpr 0x3885d40 <col:54, col:55> 'class TClass *' <LValueToRValue>
|       |       `-UnaryOperator 0x3885d20 <col:54, col:55> 'class TClass *const' lvalue prefix '*'
|       |         `-ImplicitCastExpr 0x3885d08 <col:55> 'class TClass *const *' <LValueToRValue>
|       |           `-MemberExpr 0x3885cd0 <col:55> 'class TClass *const *const' lvalue ->fClassPtr 0x2b0d840
|       |             `-CXXThisExpr 0x3885cb8 <col:55> 'const class TClassRef *' this
|       |-ImplicitCastExpr 0x3885ca0 <col:68, col:69> 'class TClass *' <LValueToRValue>
|       | `-UnaryOperator 0x3885c80 <col:68, col:69> 'class TClass *const' lvalue prefix '*'
|       |   `-ImplicitCastExpr 0x3885c68 <col:69> 'class TClass *const *' <LValueToRValue>
|       |     `-MemberExpr 0x3885c30 <col:69> 'class TClass *const *const' lvalue ->fClassPtr 0x2b0d840
|       |       `-CXXThisExpr 0x3885c18 <col:69> 'const class TClassRef *' this
|       `-CXXMemberCallExpr 0x3885bf0 <col:81, col:98> 'class TClass *'
|         `-MemberExpr 0x3885bb8 <col:81> '<bound member function type>' ->InternalGetClass 0x2b2f230
|           `-CXXThisExpr 0x3885ba0 <col:81> 'const class TClassRef *' this
|-CXXConversionDecl 0x2b300a8 <line:74:4, col:99> col:4 imported used operator TClass * 'class TClass *(void) const'
| `-CompoundStmt 0x3886180 <col:29, col:99>
|   `-ReturnStmt 0x3886168 <col:31, col:96>
|     `-ConditionalOperator 0x3886138 <col:38, col:96> 'class TClass *'
|       |-ParenExpr 0x3886118 <col:38, col:63> '_Bool'
|       | `-BinaryOperator 0x38860f0 <col:39, col:53> '_Bool' '&&'
|       |   |-ImplicitCastExpr 0x38860d8 <col:39> '_Bool' <PointerToBoolean>
|       |   | `-ImplicitCastExpr 0x38860c0 <col:39> 'class TClass *const *' <LValueToRValue>
|       |   |   `-MemberExpr 0x3886088 <col:39> 'class TClass *const *const' lvalue ->fClassPtr 0x2b0d840
|       |   |     `-CXXThisExpr 0x3886070 <col:39> 'const class TClassRef *' this
|       |   `-ImplicitCastExpr 0x3886058 <col:52, col:53> '_Bool' <PointerToBoolean>
|       |     `-ImplicitCastExpr 0x3886040 <col:52, col:53> 'class TClass *' <LValueToRValue>
|       |       `-UnaryOperator 0x3886020 <col:52, col:53> 'class TClass *const' lvalue prefix '*'
|       |         `-ImplicitCastExpr 0x3886008 <col:53> 'class TClass *const *' <LValueToRValue>
|       |           `-MemberExpr 0x3885fd0 <col:53> 'class TClass *const *const' lvalue ->fClassPtr 0x2b0d840
|       |             `-CXXThisExpr 0x3885fb8 <col:53> 'const class TClassRef *' this
|       |-ImplicitCastExpr 0x3885fa0 <col:66, col:67> 'class TClass *' <LValueToRValue>
|       | `-UnaryOperator 0x3885f80 <col:66, col:67> 'class TClass *const' lvalue prefix '*'
|       |   `-ImplicitCastExpr 0x3885f68 <col:67> 'class TClass *const *' <LValueToRValue>
|       |     `-MemberExpr 0x3885f30 <col:67> 'class TClass *const *const' lvalue ->fClassPtr 0x2b0d840
|       |       `-CXXThisExpr 0x3885f18 <col:67> 'const class TClassRef *' this
|       `-CXXMemberCallExpr 0x3885ef0 <col:79, col:96> 'class TClass *'
|         `-MemberExpr 0x3885eb8 <col:79> '<bound member function type>' ->InternalGetClass 0x2b2f230
|           `-CXXThisExpr 0x3885ea0 <col:79> 'const class TClassRef *' this
|-FieldDecl 0x2b0d728 <line:31:4, col:18> col:18 imported referenced fClassName 'std::string':'class std::__cxx11::basic_string<char>'
| `-AnnotateAttr 0x2b0d770 <col:31, col:55> R"ATTRDUMP(Name of referenced class)ATTRDUMP"
`-FieldDecl 0x2b0d840 <line:35:4, col:18> col:18 imported referenced fClassPtr 'class TClass *const *'
  `-AnnotateAttr 0x2b0d888 <col:31, col:74> R"ATTRDUMP(! Ptr to the permanent TClass ptr/reference)ATTRDUMP"

Good, thanks!

Now the reverse, please: first the call to TCling__DEBUG__decl_dump, then .L /home/dm232107/src/valjean/valjean/eponine/tripoli4/resources/depletion/DepletedComposition.C++O

Does that “fix” it or do you still see the error message "TClass and cling disagree on the size of the class TClassRef"?

(Thanks for bearing with me, this one is super weird, never saw it, and it’s not being reproduced by Fedora 34 as I had hoped.)

Sorry, not sure I follow. Should I still call TCling__DEBUG__decl_dump((void*)(gInterpreter->ClassInfo_Tagnum(TClass::GetClass("TClassRef")->GetClassInfo()))) or not?

Nevermind, I think I got it. No, it does not fix it. Here is the output:

root [0] .rawInput
Using raw input
root [1] void TCling__DEBUG__decl_dump(void* D);
root [2] .rawInput
Not using raw input
root [3] TCling__DEBUG__decl_dump((void*)(gInterpreter->ClassInfo_Tagnum(TClass::GetClass("TClassRef")->GetClassInfo())));
CXXRecordDecl 0x2be2e00 </volatile/dm232107/spack/stage/spack-stage-root-6.22.06-5m5dji7jlm3usbupgo4mcatrivj2mtjd/spack-build-5m5dji7/include/TClassRef.h:28:1, line:76:1> line:28:7 imported referenced class TClassRef definition
|-DefinitionData standard_layout has_user_declared_ctor can_const_default_init
| |-DefaultConstructor exists non_trivial user_provided
| |-CopyConstructor non_trivial user_declared has_const_param needs_overload_resolution implicit_has_const_param
| |-MoveConstructor needs_overload_resolution
| |-CopyAssignment non_trivial has_const_param user_declared implicit_has_const_param
| |-MoveAssignment needs_overload_resolution
| `-Destructor non_trivial user_declared needs_overload_resolution
|-FieldDecl 0x2be2fc8 <line:31:4, col:18> col:18 imported referenced fClassName 'std::string':'class std::__cxx11::basic_string<char>'
| `-AnnotateAttr 0x2be3010 <col:31, col:55> R"ATTRDUMP(Name of referenced class)ATTRDUMP"
|-FieldDecl 0x2be30e0 <line:35:4, col:18> col:18 imported referenced fClassPtr 'class TClass *const *'
| `-AnnotateAttr 0x2be3128 <col:31, col:74> R"ATTRDUMP(! Ptr to the permanent TClass ptr/reference)ATTRDUMP"
`-<undeserialized declarations>
root [4] .L /home/dm232107/src/valjean/valjean/eponine/tripoli4/resources/depletion/DepletedComposition.C++O
Info in <TUnixSystem::ACLiC>: creating shared library /home/dm232107/src/valjean/valjean/eponine/tripoli4/resources/depletion/DepletedComposition_C.so
Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TBaseClass, respectively 152 128

Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TClassRef, respectively 40 16

Error in <TInterpreter::InspectMembers>: TClass and cling disagree on the size of the class TClassRef, respectively 40 16

And @Axel, thank you for taking the time to look into this!