// Copyright 2014 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // Verify that it is not possible to take the address of // static items with usnafe interior. use std::kinds::marker; use std::ty::Unsafe; struct MyUnsafe { value: Unsafe } impl MyUnsafe { fn forbidden(&self) {} } enum UnsafeEnum { VariantSafe, VariantUnsafe(Unsafe) } static STATIC1: UnsafeEnum = VariantSafe; static STATIC2: Unsafe = Unsafe{value: 1, marker1: marker::InvariantType}; static STATIC3: MyUnsafe = MyUnsafe{value: STATIC2}; static STATIC4: &'static Unsafe = &'static STATIC2; //~^ ERROR borrow of immutable static items with unsafe interior is not allowed fn main() { let a = &STATIC1; //~^ ERROR borrow of immutable static items with unsafe interior is not allowed STATIC3.forbidden() //~^ ERROR borrow of immutable static items with unsafe interior is not allowed }