[CIR] Add support for polymorphic typeid with vtable lookup #2005
+242
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Stack from ghstack (oldest at bottom):
This commit implements runtime type identification for polymorphic types,
completing typeid operator support in ClangIR.
Previously, only non-polymorphic (static) typeid was supported. This adds:
Polymorphic typeid emission: When typeid is applied to an expression
of polymorphic class type, we now emit vtable lookup to get the runtime
type_info pointer.
Null pointer checking: For pointer operands, we emit null checks and
call emitBadTypeidCall (currently unreachable until exception support).
Matches CodeGen behavior of always checking, even for references.
Type safety checks: emitTypeCheck ensures typeid is not used unsafely
during object construction or destruction.
Vtable layouts: Supports both traditional (vtable[-1]) and relative
(load.relative(vtable, -4)) layouts for Itanium ABI.
Implementation follows CodeGen closely:
The vtable layout for type_info access:
Test Plan:
(general CIR lowering issue, not specific to this feature)