Skip to content

Commit 140a2f3

Browse files
celinvaltedinski
authored andcommitted
Turn goto-c backend library into a module. (rust-lang#871)
* Change backend library to be a module in the compiler Also rename from rustc_codegen_kani to codegen_cprover_gotoc Keeping cprover dependencies separate in case we ever decided to add another backend.
1 parent eca2c52 commit 140a2f3

File tree

29 files changed

+100
-120
lines changed

29 files changed

+100
-120
lines changed

Cargo.lock

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -417,9 +417,20 @@ name = "kani-compiler"
417417
version = "0.1.0"
418418
dependencies = [
419419
"atty",
420+
"bitflags",
420421
"clap",
422+
"cprover_bindings",
423+
"cstr",
421424
"kani_queries",
422-
"rustc_codegen_kani",
425+
"kani_restrictions",
426+
"libc",
427+
"measureme",
428+
"num",
429+
"rustc-demangle",
430+
"serde",
431+
"serde_json",
432+
"smallvec",
433+
"snap",
423434
"tracing",
424435
"tracing-subscriber",
425436
"tracing-tree",
@@ -896,26 +907,6 @@ version = "1.1.0"
896907
source = "registry+https://github.com/rust-lang/crates.io-index"
897908
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
898909

899-
[[package]]
900-
name = "rustc_codegen_kani"
901-
version = "0.0.0"
902-
dependencies = [
903-
"bitflags",
904-
"cprover_bindings",
905-
"cstr",
906-
"kani_queries",
907-
"kani_restrictions",
908-
"libc",
909-
"measureme",
910-
"num",
911-
"rustc-demangle",
912-
"serde",
913-
"serde_json",
914-
"smallvec",
915-
"snap",
916-
"tracing",
917-
]
918-
919910
[[package]]
920911
name = "rustdoc"
921912
version = "0.0.0"

src/kani-compiler/Cargo.toml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,30 @@ license = "MIT OR Apache-2.0"
99

1010
[dependencies]
1111
atty = "0.2.14"
12+
bitflags = { version = "1.0", optional = true }
13+
cbmc = { path = "../../cprover_bindings", package = "cprover_bindings", optional = true }
1214
clap = "2.33.0"
15+
cstr = { version = "0.2", optional = true }
1316
kani_queries = {path = "kani_queries"}
14-
rustc_codegen_kani = {path = "rustc_codegen_kani"}
17+
kani_restrictions = { path = "../../library/kani_restrictions", optional = true }
18+
libc = { version = "0.2", optional = true }
19+
measureme = { version = "9.1.0", optional = true }
20+
num = { version = "0.4.0", optional = true }
21+
rustc-demangle = { version = "0.1.21", optional = true }
22+
serde = { version = "1", optional = true }
23+
serde_json = { version = "1", optional = true }
24+
smallvec = { version = "1.6.1", features = ["union", "may_dangle"], optional = true }
25+
snap = { version = "1", optional = true }
1526
tracing = {version = "0.1", features = ["max_level_trace", "release_max_level_info"]}
1627
tracing-subscriber = {version = "0.3.8", features = ["env-filter", "json", "fmt"]}
1728
tracing-tree = "0.2.0"
1829

30+
# Future proofing: enable backend dependencies using feature.
31+
[features]
32+
default = ['cprover']
33+
cprover = ['bitflags', 'cbmc', 'cstr', 'kani_restrictions', 'libc', 'measureme', 'num', 'rustc-demangle', 'serde',
34+
'serde_json', 'smallvec', 'snap']
35+
1936
[package.metadata.rust-analyzer]
2037
# This package uses rustc crates.
2138
rustc_private=true

src/kani-compiler/rustc_codegen_kani/Cargo.toml

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/kani-compiler/rustc_codegen_kani/src/lib.rs

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/kani-compiler/rustc_codegen_kani/src/codegen/block.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/block.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
//! This file contains functions related to codegenning MIR blocks into gotoc
55
6-
use crate::GotocCtx;
6+
use crate::codegen_cprover_gotoc::GotocCtx;
77
use rustc_middle::mir::{BasicBlock, BasicBlockData};
88

99
impl<'tcx> GotocCtx<'tcx> {

src/kani-compiler/rustc_codegen_kani/src/codegen/function.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/function.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
//! This file contains functions related to codegenning MIR functions into gotoc
55
6-
use crate::context::metadata::HarnessMetadata;
7-
use crate::GotocCtx;
6+
use crate::codegen_cprover_gotoc::context::metadata::HarnessMetadata;
7+
use crate::codegen_cprover_gotoc::GotocCtx;
88
use cbmc::goto_program::{Expr, Stmt, Symbol};
99
use cbmc::InternString;
1010
use rustc_ast::ast;

src/kani-compiler/rustc_codegen_kani/src/codegen/intrinsic.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/intrinsic.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
33
//! this module handles intrinsics
4-
use crate::GotocCtx;
4+
use crate::codegen_cprover_gotoc::GotocCtx;
55
use cbmc::goto_program::{BuiltinFn, Expr, Location, Stmt, Type};
66
use rustc_middle::mir::Place;
77
use rustc_middle::ty::layout::LayoutOf;

src/kani-compiler/rustc_codegen_kani/src/codegen/operand.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/operand.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
3-
use crate::utils::slice_fat_ptr;
4-
use crate::GotocCtx;
3+
use crate::codegen_cprover_gotoc::utils::slice_fat_ptr;
4+
use crate::codegen_cprover_gotoc::GotocCtx;
55
use cbmc::goto_program::{Expr, Location, Stmt, Symbol, Type};
66
use cbmc::NO_PRETTY_NAME;
77
use rustc_ast::ast::Mutability;

src/kani-compiler/rustc_codegen_kani/src/codegen/place.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/place.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
//! in [codegen_place] below.
77
88
use super::typ::TypeExt;
9-
use crate::utils::slice_fat_ptr;
10-
use crate::GotocCtx;
9+
use crate::codegen_cprover_gotoc::utils::slice_fat_ptr;
10+
use crate::codegen_cprover_gotoc::GotocCtx;
1111
use cbmc::goto_program::{Expr, Type};
1212
use rustc_hir::Mutability;
1313
use rustc_middle::ty::layout::LayoutOf;

src/kani-compiler/rustc_codegen_kani/src/codegen/rvalue.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/rvalue.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
33
use super::typ::{is_pointer, pointee_type, TypeExt};
4-
use crate::utils::{dynamic_fat_ptr, slice_fat_ptr};
5-
use crate::{GotocCtx, VtableCtx};
4+
use crate::codegen_cprover_gotoc::utils::{dynamic_fat_ptr, slice_fat_ptr};
5+
use crate::codegen_cprover_gotoc::{GotocCtx, VtableCtx};
66
use cbmc::goto_program::{Expr, Location, Stmt, Symbol, Type};
77
use cbmc::utils::{aggr_tag, BUG_REPORT_URL};
88
use cbmc::MachineModel;

src/kani-compiler/rustc_codegen_kani/src/codegen/span.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/span.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
//! MIR Span related functions
55
6-
use crate::GotocCtx;
6+
use crate::codegen_cprover_gotoc::GotocCtx;
77
use cbmc::goto_program::Location;
88
use rustc_middle::mir::{Local, VarDebugInfo, VarDebugInfoContents};
99
use rustc_span::Span;

src/kani-compiler/rustc_codegen_kani/src/codegen/statement.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/statement.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
33
use super::typ::TypeExt;
44
use super::typ::FN_RETURN_VOID_VAR_NAME;
5-
use crate::utils;
6-
use crate::{GotocCtx, VtableCtx};
5+
use crate::codegen_cprover_gotoc::utils;
6+
use crate::codegen_cprover_gotoc::{GotocCtx, VtableCtx};
77
use cbmc::goto_program::{BuiltinFn, Expr, Location, Stmt, Type};
88
use rustc_hir::def_id::DefId;
99
use rustc_middle::mir;

src/kani-compiler/rustc_codegen_kani/src/codegen/static_var.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/static_var.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
//! This file contains functions related to codegenning MIR static variables into gotoc
55
6-
use crate::GotocCtx;
6+
use crate::codegen_cprover_gotoc::GotocCtx;
77
use cbmc::goto_program::Symbol;
88
use rustc_hir::def_id::DefId;
99
use rustc_middle::mir::mono::MonoItem;

src/kani-compiler/rustc_codegen_kani/src/codegen/typ.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/codegen/typ.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
3-
use crate::GotocCtx;
3+
use crate::codegen_cprover_gotoc::GotocCtx;
44
use cbmc::goto_program::{DatatypeComponent, Expr, Parameter, Symbol, SymbolTable, Type};
55
use cbmc::utils::aggr_tag;
66
use cbmc::{btree_map, NO_PRETTY_NAME};

src/kani-compiler/rustc_codegen_kani/src/compiler_interface.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/compiler_interface.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
//! This file contains the code necessary to interface with the compiler backend
55
6-
use crate::context::metadata::KaniMetadata;
7-
use crate::GotocCtx;
6+
use crate::codegen_cprover_gotoc::context::metadata::KaniMetadata;
7+
use crate::codegen_cprover_gotoc::GotocCtx;
88
use bitflags::_core::any::Any;
99
use cbmc::goto_program::symtab_transformer;
1010
use cbmc::InternedString;

src/kani-compiler/rustc_codegen_kani/src/context/current_fn.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/context/current_fn.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
33

4-
use crate::GotocCtx;
4+
use crate::codegen_cprover_gotoc::GotocCtx;
55
use cbmc::goto_program::Stmt;
66
use rustc_middle::mir::BasicBlock;
77
use rustc_middle::mir::Body;

src/kani-compiler/rustc_codegen_kani/src/context/goto_ctx.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/context/goto_ctx.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
use super::current_fn::CurrentFnCtx;
1717
use super::metadata::HarnessMetadata;
1818
use super::vtable_ctx::VtableCtx;
19-
use crate::overrides::{fn_hooks, GotocHooks};
20-
use crate::utils::full_crate_name;
19+
use crate::codegen_cprover_gotoc::overrides::{fn_hooks, GotocHooks};
20+
use crate::codegen_cprover_gotoc::utils::full_crate_name;
2121
use cbmc::goto_program::{DatatypeComponent, Expr, Location, Stmt, Symbol, SymbolTable, Type};
2222
use cbmc::utils::aggr_tag;
2323
use cbmc::{InternStringOption, InternedString, NO_PRETTY_NAME};

src/kani-compiler/rustc_codegen_kani/src/context/vtable_ctx.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/context/vtable_ctx.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
///
1616
/// For the current CBMC implementation of function restrictions, see:
1717
/// http://cprover.diffblue.com/md__home_travis_build_diffblue_cbmc_doc_architectural_restrict-function-pointer.html
18-
use crate::GotocCtx;
18+
use crate::codegen_cprover_gotoc::GotocCtx;
1919
use cbmc::goto_program::{Stmt, Type};
2020
use cbmc::InternedString;
2121
use kani_restrictions::{CallSite, PossibleMethodEntry, TraitDefinedMethod, VtableCtxResults};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0 OR MIT
3+
mod codegen;
4+
mod compiler_interface;
5+
mod context;
6+
mod overrides;
7+
mod utils;
8+
9+
pub use compiler_interface::GotocCodegenBackend;
10+
pub use context::GotocCtx;
11+
pub use context::VtableCtx;

src/kani-compiler/rustc_codegen_kani/src/overrides/hooks.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/overrides/hooks.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
//! It would be too nasty if we spread around these sort of undocumented hooks in place, so
99
//! this module addresses this issue.
1010
11-
use crate::utils;
12-
use crate::GotocCtx;
11+
use crate::codegen_cprover_gotoc::utils;
12+
use crate::codegen_cprover_gotoc::GotocCtx;
1313
use cbmc::goto_program::{BuiltinFn, Expr, Location, Stmt, Symbol, Type};
1414
use cbmc::NO_PRETTY_NAME;
1515
use kani_queries::UserInput;

src/kani-compiler/rustc_codegen_kani/src/utils/debug.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/utils/debug.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
//! This file contains functionality that makes Kani easier to debug
55
6-
use crate::GotocCtx;
6+
use crate::codegen_cprover_gotoc::GotocCtx;
77
use cbmc::goto_program::Location;
88
use rustc_middle::mir::Body;
99
use rustc_middle::ty::print::with_no_trimmed_paths;

src/kani-compiler/rustc_codegen_kani/src/utils/names.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/utils/names.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
//! Functions that make names for things
55
6-
use crate::GotocCtx;
6+
use crate::codegen_cprover_gotoc::GotocCtx;
77
use cbmc::InternedString;
88
use rustc_hir::def_id::DefId;
99
use rustc_hir::def_id::LOCAL_CRATE;

src/kani-compiler/rustc_codegen_kani/src/utils/utils.rs renamed to src/kani-compiler/src/codegen_cprover_gotoc/utils/utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0 OR MIT
33
use super::super::codegen::TypeExt;
4-
use crate::GotocCtx;
4+
use crate::codegen_cprover_gotoc::GotocCtx;
55
use cbmc::btree_string_map;
66
use cbmc::goto_program::{Expr, ExprValue, Location, Stmt, SymbolTable, Type};
77
use rustc_middle::ty::layout::LayoutOf;

src/kani-compiler/src/main.rs

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,35 @@
77
//! Like miri, clippy, and other tools developed on the top of rustc, we rely on the
88
//! rustc_private feature and a specific version of rustc.
99
10-
#![feature(rustc_private, once_cell)]
10+
#![feature(bool_to_option)]
11+
#![feature(crate_visibility_modifier)]
12+
#![feature(extern_types)]
13+
#![feature(in_band_lifetimes)]
14+
#![feature(nll)]
15+
#![recursion_limit = "256"]
16+
#![feature(box_patterns)]
17+
#![feature(once_cell)]
18+
#![feature(rustc_private)]
19+
extern crate rustc_arena;
20+
extern crate rustc_ast;
21+
extern crate rustc_attr;
1122
extern crate rustc_codegen_ssa;
23+
extern crate rustc_data_structures;
1224
extern crate rustc_driver;
25+
extern crate rustc_errors;
26+
extern crate rustc_fs_util;
27+
extern crate rustc_hir;
28+
extern crate rustc_index;
29+
extern crate rustc_llvm;
30+
extern crate rustc_metadata;
31+
extern crate rustc_middle;
32+
extern crate rustc_serialize;
1333
extern crate rustc_session;
34+
extern crate rustc_span;
35+
extern crate rustc_target;
1436

37+
#[cfg(feature = "cprover")]
38+
mod codegen_cprover_gotoc;
1539
mod parser;
1640
mod session;
1741

@@ -83,9 +107,14 @@ fn main() -> Result<(), &'static str> {
83107
let mut callbacks = KaniCallbacks {};
84108
let mut compiler = RunCompiler::new(&rustc_args, &mut callbacks);
85109
if matches.is_present("goto-c") {
86-
compiler.set_make_codegen_backend(Some(Box::new(move |_cfg| {
87-
rustc_codegen_kani::GotocCodegenBackend::new(&Rc::new(queries))
88-
})));
110+
if cfg!(feature = "cprover") {
111+
compiler.set_make_codegen_backend(Some(Box::new(move |_cfg| {
112+
codegen_cprover_gotoc::GotocCodegenBackend::new(&Rc::new(queries))
113+
})));
114+
} else {
115+
return Err("Kani was configured without 'cprover' feature. You must enable this \
116+
feature in order to use --goto-c argument.");
117+
}
89118
}
90119
compiler.run().or(Err("Failed to compile crate."))
91120
}

0 commit comments

Comments
 (0)