(&self, def_id: DefId)
| 226 | } |
| 227 | |
| 228 | pub fn get_static(&self, def_id: DefId) -> SpirvValue { |
| 229 | let instance = Instance::mono(self.tcx, def_id); |
| 230 | if let Some(&g) = self.instances.borrow().get(&instance) { |
| 231 | return g; |
| 232 | } |
| 233 | |
| 234 | let defined_in_current_codegen_unit = self |
| 235 | .codegen_unit |
| 236 | .items() |
| 237 | .contains_key(&MonoItem::Static(def_id)); |
| 238 | assert!( |
| 239 | !defined_in_current_codegen_unit, |
| 240 | "get_static() should always hit the cache for statics defined in the same CGU, but did not for `{def_id:?}`" |
| 241 | ); |
| 242 | |
| 243 | let ty = instance.ty(self.tcx, ParamEnv::reveal_all()); |
| 244 | let sym = self.tcx.symbol_name(instance).name; |
| 245 | let span = self.tcx.def_span(def_id); |
| 246 | let g = self.declare_global(span, self.layout_of(ty).spirv_type(span, self)); |
| 247 | self.instances.borrow_mut().insert(instance, g); |
| 248 | self.set_linkage(g.def_cx(self), sym.to_string(), LinkageType::Import); |
| 249 | g |
| 250 | } |
| 251 | |
| 252 | fn declare_global(&self, span: Span, ty: Word) -> SpirvValue { |
| 253 | let ptr_ty = SpirvType::Pointer { pointee: ty }.def(span, self); |
no test coverage detected