CFI: Restore typeid_for_instance default behavior
Restore typeid_for_instance default behavior of performing self type erasure, since it's the most common case and what it does most of the time. Using concrete self (or not performing self type erasure) is for assigning a secondary type id, and secondary type ids are only assigned when they're unique and to methods, and also are only tested for when methods are used as function pointers.
This commit is contained in:
parent
9cbaa01599
commit
2498a9d464
4 changed files with 29 additions and 13 deletions
|
@ -147,7 +147,7 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
|
|||
for options in [
|
||||
TypeIdOptions::GENERALIZE_POINTERS,
|
||||
TypeIdOptions::NORMALIZE_INTEGERS,
|
||||
TypeIdOptions::ERASE_SELF_TYPE,
|
||||
TypeIdOptions::USE_CONCRETE_SELF,
|
||||
]
|
||||
.into_iter()
|
||||
.powerset()
|
||||
|
@ -173,9 +173,7 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
|
|||
|
||||
if self.tcx.sess.is_sanitizer_kcfi_enabled() {
|
||||
// LLVM KCFI does not support multiple !kcfi_type attachments
|
||||
// Default to erasing the self type. If we need the concrete type, there will be a
|
||||
// hint in the instance.
|
||||
let mut options = TypeIdOptions::ERASE_SELF_TYPE;
|
||||
let mut options = TypeIdOptions::empty();
|
||||
if self.tcx.sess.is_sanitizer_cfi_generalize_pointers_enabled() {
|
||||
options.insert(TypeIdOptions::GENERALIZE_POINTERS);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue