(wild):因不安全使用方式被排除
确定可转换指针的具体类型(ptr/array_ptr/nt_array_ptr)
typ3c通过类型限定符推断[Foster et al. 2006]实现分类:
为指针的每个层级分配限定符变量q(如int**有两个层级)
生成约束集x ⊑ y,其中x/y为限定符变量或字面量(chk或wild)
约束解算遵循偏序关系chk ⊏ wild,可视为流图分析:从wild可达的节点必须为wild,其余可为chk
示例流图分析:
变量y(外层)、*y(内层)和z的限定符节点与W(wild节点)构成约束图。
赋值z = (int *)5产生边W → z
解引用赋值*y = z产生双向边z ↔ *y
由此判定z和*y必须为wild(因与W连通),而y可保持chk。故迁移后y的类型为ptr<int*>,其余保持不变。
(注:技术细节部分保留数学符号和形式化描述风格,确保专业准确性;实际案例引用保持论文原始编号体系)