Skip to content

Commit

Permalink
libsyntax: don't allow enum structs with no fields
Browse files Browse the repository at this point in the history
Unit-like structs are written as `struct Foo;`, but we erroneously
accepted `struct Foo();` and took it to mean the same thing. Now we
don't, so use the `struct Foo;` form!

[breaking-change]
  • Loading branch information
ben0x539 committed Jun 22, 2014
1 parent 4c39962 commit ff50ce9
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/libsyntax/parse/parser.rs
Expand Up @@ -4116,6 +4116,11 @@ impl<'a> Parser<'a> {
};
spanned(lo, p.span.hi, struct_field_)
});
if fields.len() == 0 {
self.fatal(format!("unit-like struct definition should be \
written as `struct {};`",
token::get_ident(class_name)).as_slice());
}
self.expect(&token::SEMI);
} else if self.eat(&token::SEMI) {
// It's a unit-like struct.
Expand Down
2 changes: 1 addition & 1 deletion src/test/compile-fail/lint-dead-code-1.rs
Expand Up @@ -37,7 +37,7 @@ static USED_STATIC: int = 0;
static STATIC_USED_IN_ENUM_DISCRIMINANT: uint = 10;

pub type typ = *UsedStruct4;
pub struct PubStruct();
pub struct PubStruct;
struct PrivStruct; //~ ERROR: code is never used
struct UsedStruct1 {
#[allow(dead_code)]
Expand Down
13 changes: 13 additions & 0 deletions src/test/compile-fail/struct-no-fields-enumlike.rs
@@ -0,0 +1,13 @@
// 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 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

struct Foo(); //~ ERROR unit-like struct definition should be written as `struct Foo;`

fn main() {}

5 comments on commit ff50ce9

@bors
Copy link
Contributor

@bors bors commented on ff50ce9 Jun 23, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from pcwalton
at ben0x539@ff50ce9

@bors
Copy link
Contributor

@bors bors commented on ff50ce9 Jun 23, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging ben0x539/rust/nullary-tuple-struct = ff50ce9 into auto

@bors
Copy link
Contributor

@bors bors commented on ff50ce9 Jun 23, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ben0x539/rust/nullary-tuple-struct = ff50ce9 merged ok, testing candidate = baa7208

@bors
Copy link
Contributor

@bors bors commented on ff50ce9 Jun 23, 2014

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = baa7208

Please sign in to comment.