• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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>>9 pub 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