(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*>
,其余保持不变。
(注:技术细节部分保留数学符号和形式化描述风格,确保专业准确性;实际案例引用保持论文原始编号体系)