1 //! Target dependent parameters needed for layouts 2 3 use base_db::CrateId; 4 use hir_def::layout::TargetDataLayout; 5 use triomphe::Arc; 6 7 use crate::db::HirDatabase; 8 target_data_layout_query( db: &dyn HirDatabase, krate: CrateId, ) -> Option<Arc<TargetDataLayout>>9pub fn target_data_layout_query( 10 db: &dyn HirDatabase, 11 krate: CrateId, 12 ) -> Option<Arc<TargetDataLayout>> { 13 let crate_graph = db.crate_graph(); 14 let target_layout = crate_graph[krate].target_layout.as_ref().ok()?; 15 let res = TargetDataLayout::parse_from_llvm_datalayout_string(&target_layout); 16 if let Err(_e) = &res { 17 // FIXME: Print the error here once it implements debug/display 18 // also logging here is somewhat wrong, but unfortunately this is the earliest place we can 19 // parse that doesn't impose a dependency to the rust-abi crate for project-model 20 tracing::error!("Failed to parse target data layout for {krate:?}"); 21 } 22 res.ok().map(Arc::new) 23 } 24