|  | //@ run-pass | 
|  | // Test that the Callbacks interface to the compiler works. | 
|  |  | 
|  | //@ ignore-cross-compile | 
|  | //@ ignore-remote | 
|  |  | 
|  | #![feature(rustc_private)] | 
|  |  | 
|  | extern crate rustc_driver; | 
|  | extern crate rustc_interface; | 
|  |  | 
|  | use rustc_interface::interface; | 
|  |  | 
|  | struct TestCalls<'a> { | 
|  | count: &'a mut u32, | 
|  | } | 
|  |  | 
|  | impl rustc_driver::Callbacks for TestCalls<'_> { | 
|  | fn config(&mut self, _config: &mut interface::Config) { | 
|  | *self.count *= 2; | 
|  | } | 
|  | } | 
|  |  | 
|  | fn main() { | 
|  | let mut count = 1; | 
|  | let args = vec!["compiler-calls".to_string(), "foo.rs".to_string()]; | 
|  | rustc_driver::catch_fatal_errors(|| -> interface::Result<()> { | 
|  | rustc_driver::run_compiler(&args, &mut TestCalls { count: &mut count }); | 
|  | Ok(()) | 
|  | }) | 
|  | .ok(); | 
|  | assert_eq!(count, 2); | 
|  | } |