Repository navigation
[core] Provide TParameter dictionaries for all arithmetic types - #23613
Conversation
Instantiating TParameter<T> for a type without a dictionary (e.g. char) from the interpreter failed with unresolved symbols: IncrementalExecutor::executeFunction: symbol '_ZN10TParameterIcE5ClassEv' unresolved while linking symbol! IncrementalExecutor::executeFunction: symbol '_ZN10TParameterIcE8StreamerER7TBuffer' unresolved while linking symbol! because the interpreter-emitted vtable references the ClassDef-declared Class() and Streamer() members, which are only defined by dictionaries, and only Bool_t, Float_t, Double_t, Int_t, Long_t and Long64_t had one in LinkDef3.h. Add the remaining standard arithmetic types (Char_t, signed char, UChar_t, Short_t, UShort_t, UInt_t, ULong_t and ULong64_t). signed char is a type distinct from char, and is what std::int8_t aliases. Also restore the default `Option_t * = ""` argument on the TParameter overrides of TObject::Print() and TObject::ls(), so that they are callable without arguments through a TParameter<T>*-typed reference (in particular from Python, as in the reproducer of the original report). Fixes root-project#10724 🤖 Done with the help of AI
d3d4935 to
eeb15c6
Compare
Test Results 24 files 24 suites 4d 1h 17m 59s ⏱️ For more details on these failures, see this check. Results for commit eeb15c6. ♻️ This comment has been updated with latest results. |
It is not clear this PR (which has its own Intrinsic value) actually fixes the issue (where |
|
The original #10724 was about cppyy evaluating each enumerator of a class template via |
|
Thanks |
Instantiating TParameter for a type without a dictionary (e.g. char) from the interpreter failed with unresolved symbols:
IncrementalExecutor::executeFunction: symbol
'_ZN10TParameterIcE5ClassEv' unresolved while linking symbol!
IncrementalExecutor::executeFunction: symbol
'_ZN10TParameterIcE8StreamerER7TBuffer' unresolved while linking
symbol!
because the interpreter-emitted vtable references the ClassDef-declared Class() and Streamer() members, which are only defined by dictionaries, and only Bool_t, Float_t, Double_t, Int_t, Long_t and Long64_t had one in LinkDef3.h. Add the remaining standard arithmetic types (Char_t, UChar_t, Short_t, UShort_t, UInt_t, ULong_t and ULong64_t).
Also restore the default "Option_t * = """ argument on the TParameter overrides of TObject::Print() and TObject::ls(), so that they are callable without arguments through a TParameter*-typed reference (in particular from Python, as in the reproducer of the original report).
Fixes #10724
🤖 Done with the help of AI