From d4a08f536223e33549f352c92470ff8cd19a8db8 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 21 Jul 2016 14:35:16 +0100 Subject: [PATCH] Allow clean cast from derived to base type, along the same lines as already-allowed prefix subtyping. --- src/pointer-analysis/value_set_dereference.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/pointer-analysis/value_set_dereference.cpp b/src/pointer-analysis/value_set_dereference.cpp index b79b2f926ee..e8f0c8f159d 100644 --- a/src/pointer-analysis/value_set_dereference.cpp +++ b/src/pointer-analysis/value_set_dereference.cpp @@ -280,6 +280,13 @@ bool value_set_dereferencet::dereference_type_compare( to_struct_type(ot_base))) return true; // ok, dt is a prefix of ot } + + if(ot_base.id()==ID_struct) + { + const auto& otcomp = to_struct_type(ot_base).components(); + if(otcomp.size()!=0 && dereference_type_compare(otcomp[0].type(),dereference_type)) + return true; // dt is a prefix (specifically the first field) of ot + } // we are generous about code pointers if(dereference_type.id()==ID_code &&