Skip to content

Commit 2d8fbba

Browse files
committed
rustc: Add error about obsolete struct deref
1 parent 3b1862a commit 2d8fbba

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/librustc/middle/typeck/check/mod.rs

+10
Original file line numberDiff line numberDiff line change
@@ -2765,6 +2765,16 @@ pub fn check_expr_with_unifier(fcx: @FnCtxt,
27652765
}
27662766
None => {
27672767
match *sty {
2768+
ty::ty_struct(did, ref substs) if {
2769+
let fields = ty::struct_fields(fcx.tcx(), did, substs);
2770+
fields.len() == 1
2771+
&& fields[0].ident == token::special_idents::unnamed_field
2772+
} => {
2773+
// This is an obsolete struct deref
2774+
tcx.sess.span_err(
2775+
expr.span,
2776+
"single-field tuple-structs can no longer be dereferenced");
2777+
}
27682778
_ => {
27692779
fcx.type_error_message(expr.span,
27702780
|actual| {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
fn main() {
12+
struct S(int);
13+
let s = S(0);
14+
let x = *s; //~ ERROR single-field tuple-structs can no longer be dereferenced
15+
}

0 commit comments

Comments
 (0)