From 87c8cdd8efb60a9a4b57e5b959bc56d36ea511b5 Mon Sep 17 00:00:00 2001
From: Taylor Cramer <cramertj@google.com>
Date: Fri, 21 Dec 2018 10:18:38 -0800
Subject: [PATCH 1/2] Stabilize #[repr(packed(N))]

---
 src/libsyntax/feature_gate.rs                 | 12 ++---------
 src/test/codegen/packed.rs                    |  1 -
 src/test/run-pass/issues/issue-48159.rs       |  1 -
 src/test/run-pass/packed/auxiliary/packed.rs  |  2 --
 .../packed/packed-struct-borrow-element.rs    |  2 --
 .../packed/packed-struct-generic-size.rs      |  3 ---
 .../packed/packed-struct-generic-size.stderr  | 12 +++++------
 .../run-pass/packed/packed-struct-match.rs    |  1 -
 .../run-pass/packed/packed-struct-size.rs     |  3 ---
 src/test/run-pass/packed/packed-struct-vec.rs |  1 -
 .../packed/packed-tuple-struct-size.rs        |  2 --
 .../run-pass/structs-enums/align-struct.rs    |  1 -
 src/test/run-pass/union/union-packed.rs       |  1 -
 src/test/ui/conflicting-repr-hints.rs         |  1 -
 src/test/ui/conflicting-repr-hints.stderr     | 20 +++++++++----------
 .../feature-gates/feature-gate-repr_packed.rs | 18 -----------------
 .../feature-gate-repr_packed.stderr           | 19 ------------------
 src/test/ui/print_type_sizes/packed.rs        |  1 -
 18 files changed, 18 insertions(+), 83 deletions(-)
 delete mode 100644 src/test/ui/feature-gates/feature-gate-repr_packed.rs
 delete mode 100644 src/test/ui/feature-gates/feature-gate-repr_packed.stderr

diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index 844f49fe842b7..db84703afde5d 100644
--- a/src/libsyntax/feature_gate.rs
+++ b/src/libsyntax/feature_gate.rs
@@ -397,9 +397,6 @@ declare_features! (
     // Multiple patterns with `|` in `if let` and `while let`.
     (active, if_while_or_patterns, "1.26.0", Some(48215), None),
 
-    // Allows `#[repr(packed)]` attribute on structs.
-    (active, repr_packed, "1.26.0", Some(33158), None),
-
     // Allows macro invocations in `extern {}` blocks.
     (active, macros_in_extern, "1.27.0", Some(49476), None),
 
@@ -695,6 +692,8 @@ declare_features! (
     (accepted, self_in_typedefs, "1.32.0", Some(49303), None),
     // `use path as _;` and `extern crate c as _;`
     (accepted, underscore_imports, "1.33.0", Some(48216), None),
+    // Allows `#[repr(packed(N))]` attribute on structs.
+    (accepted, repr_packed, "1.33.0", Some(33158), None),
 );
 
 // If you change this, please modify `src/doc/unstable-book` as well. You must
@@ -1588,13 +1587,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
                             gate_feature_post!(&self, repr_simd, attr.span,
                                                "SIMD types are experimental and possibly buggy");
                         }
-                        if let Some((name, _)) = item.name_value_literal() {
-                            if name == "packed" {
-                                gate_feature_post!(&self, repr_packed, attr.span,
-                                                   "the `#[repr(packed(n))]` attribute \
-                                                    is experimental");
-                            }
-                        }
                     }
                 }
             }
diff --git a/src/test/codegen/packed.rs b/src/test/codegen/packed.rs
index b50f5b6f16fed..fb6507fd22a4b 100644
--- a/src/test/codegen/packed.rs
+++ b/src/test/codegen/packed.rs
@@ -13,7 +13,6 @@
 // min-llvm-version 7.0
 
 #![crate_type = "lib"]
-#![feature(repr_packed)]
 
 #[repr(packed)]
 pub struct Packed1 {
diff --git a/src/test/run-pass/issues/issue-48159.rs b/src/test/run-pass/issues/issue-48159.rs
index 2f625747b2591..0d5b211bca9b6 100644
--- a/src/test/run-pass/issues/issue-48159.rs
+++ b/src/test/run-pass/issues/issue-48159.rs
@@ -9,7 +9,6 @@
 // except according to those terms.
 
 // run-pass
-#![feature(repr_packed)]
 #![allow(non_camel_case_types)]
 
 use std::mem;
diff --git a/src/test/run-pass/packed/auxiliary/packed.rs b/src/test/run-pass/packed/auxiliary/packed.rs
index 828be41cd4157..6884c360e4a58 100644
--- a/src/test/run-pass/packed/auxiliary/packed.rs
+++ b/src/test/run-pass/packed/auxiliary/packed.rs
@@ -8,8 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(repr_packed)]
-
 #[repr(packed)]
 pub struct P1S5 {
     a: u8,
diff --git a/src/test/run-pass/packed/packed-struct-borrow-element.rs b/src/test/run-pass/packed/packed-struct-borrow-element.rs
index 69969ba640fb0..87c26c597f58f 100644
--- a/src/test/run-pass/packed/packed-struct-borrow-element.rs
+++ b/src/test/run-pass/packed/packed-struct-borrow-element.rs
@@ -12,8 +12,6 @@
 #![allow(dead_code)]
 // ignore-emscripten weird assertion?
 
-#![feature(repr_packed)]
-
 #[repr(packed)]
 struct Foo1 {
     bar: u8,
diff --git a/src/test/run-pass/packed/packed-struct-generic-size.rs b/src/test/run-pass/packed/packed-struct-generic-size.rs
index 58cd5505ffc29..9608ff4ec0e92 100644
--- a/src/test/run-pass/packed/packed-struct-generic-size.rs
+++ b/src/test/run-pass/packed/packed-struct-generic-size.rs
@@ -10,11 +10,8 @@
 
 // run-pass
 #![allow(dead_code)]
-#![allow(stable_features)]
 #![allow(unused_comparisons)]
 
-#![feature(repr_packed)]
-
 use std::mem;
 
 #[repr(packed)]
diff --git a/src/test/run-pass/packed/packed-struct-generic-size.stderr b/src/test/run-pass/packed/packed-struct-generic-size.stderr
index 994ea7c44fbe4..672952f6e9f3b 100644
--- a/src/test/run-pass/packed/packed-struct-generic-size.stderr
+++ b/src/test/run-pass/packed/packed-struct-generic-size.stderr
@@ -1,35 +1,35 @@
 warning: unnecessary path disambiguator
-  --> $DIR/packed-struct-generic-size.rs:49:14
+  --> $DIR/packed-struct-generic-size.rs:46:14
    |
 LL |     check!(P1::<u8, u8>, 1, 3);
    |              ^^ try removing `::`
 
 warning: unnecessary path disambiguator
-  --> $DIR/packed-struct-generic-size.rs:50:14
+  --> $DIR/packed-struct-generic-size.rs:47:14
    |
 LL |     check!(P1::<u64, u16>, 1, 11);
    |              ^^ try removing `::`
 
 warning: unnecessary path disambiguator
-  --> $DIR/packed-struct-generic-size.rs:52:14
+  --> $DIR/packed-struct-generic-size.rs:49:14
    |
 LL |     check!(P2::<u8, u8>, 1, 3);
    |              ^^ try removing `::`
 
 warning: unnecessary path disambiguator
-  --> $DIR/packed-struct-generic-size.rs:53:14
+  --> $DIR/packed-struct-generic-size.rs:50:14
    |
 LL |     check!(P2::<u64, u16>, 2, 12);
    |              ^^ try removing `::`
 
 warning: unnecessary path disambiguator
-  --> $DIR/packed-struct-generic-size.rs:55:15
+  --> $DIR/packed-struct-generic-size.rs:52:15
    |
 LL |     check!(P4C::<u8, u8>, 1, 3);
    |               ^^ try removing `::`
 
 warning: unnecessary path disambiguator
-  --> $DIR/packed-struct-generic-size.rs:56:15
+  --> $DIR/packed-struct-generic-size.rs:53:15
    |
 LL |     check!(P4C::<u16, u64>, 4, 12);
    |               ^^ try removing `::`
diff --git a/src/test/run-pass/packed/packed-struct-match.rs b/src/test/run-pass/packed/packed-struct-match.rs
index e349a4e7f5414..21ef55e5a42f5 100644
--- a/src/test/run-pass/packed/packed-struct-match.rs
+++ b/src/test/run-pass/packed/packed-struct-match.rs
@@ -9,7 +9,6 @@
 // except according to those terms.
 
 // run-pass
-#![feature(repr_packed)]
 
 #[repr(packed)]
 struct Foo1 {
diff --git a/src/test/run-pass/packed/packed-struct-size.rs b/src/test/run-pass/packed/packed-struct-size.rs
index 27e07b87ff417..d6a236ffc6d68 100644
--- a/src/test/run-pass/packed/packed-struct-size.rs
+++ b/src/test/run-pass/packed/packed-struct-size.rs
@@ -13,9 +13,6 @@
 #![allow(non_camel_case_types)]
 #![allow(non_upper_case_globals)]
 
-#![feature(repr_packed)]
-
-
 use std::mem;
 
 #[repr(packed)]
diff --git a/src/test/run-pass/packed/packed-struct-vec.rs b/src/test/run-pass/packed/packed-struct-vec.rs
index d64bfe0033b94..6fd24479c1959 100644
--- a/src/test/run-pass/packed/packed-struct-vec.rs
+++ b/src/test/run-pass/packed/packed-struct-vec.rs
@@ -9,7 +9,6 @@
 // except according to those terms.
 
 // run-pass
-#![feature(repr_packed)]
 
 use std::fmt;
 use std::mem;
diff --git a/src/test/run-pass/packed/packed-tuple-struct-size.rs b/src/test/run-pass/packed/packed-tuple-struct-size.rs
index 011ff4c20f4a8..8b18bd33c74d9 100644
--- a/src/test/run-pass/packed/packed-tuple-struct-size.rs
+++ b/src/test/run-pass/packed/packed-tuple-struct-size.rs
@@ -12,8 +12,6 @@
 #![allow(dead_code)]
 #![allow(non_camel_case_types)]
 
-#![feature(repr_packed)]
-
 use std::mem;
 
 #[repr(packed)]
diff --git a/src/test/run-pass/structs-enums/align-struct.rs b/src/test/run-pass/structs-enums/align-struct.rs
index a0d05a6d0d2c1..109d5b75590df 100644
--- a/src/test/run-pass/structs-enums/align-struct.rs
+++ b/src/test/run-pass/structs-enums/align-struct.rs
@@ -11,7 +11,6 @@
 // run-pass
 #![allow(dead_code)]
 #![feature(box_syntax)]
-#![feature(repr_packed)]
 
 use std::mem;
 
diff --git a/src/test/run-pass/union/union-packed.rs b/src/test/run-pass/union/union-packed.rs
index a6aef9046eeb2..4c9e06a395c05 100644
--- a/src/test/run-pass/union/union-packed.rs
+++ b/src/test/run-pass/union/union-packed.rs
@@ -13,7 +13,6 @@
 #![allow(non_snake_case)]
 
 #![feature(untagged_unions)]
-#![feature(repr_packed)]
 
 use std::mem::{size_of, size_of_val, align_of, align_of_val};
 
diff --git a/src/test/ui/conflicting-repr-hints.rs b/src/test/ui/conflicting-repr-hints.rs
index 426f60c6b098c..f16bd1003f934 100644
--- a/src/test/ui/conflicting-repr-hints.rs
+++ b/src/test/ui/conflicting-repr-hints.rs
@@ -9,7 +9,6 @@
 // except according to those terms.
 
 #![allow(dead_code)]
-#![feature(repr_packed)]
 
 #[repr(C)]
 enum A { A }
diff --git a/src/test/ui/conflicting-repr-hints.stderr b/src/test/ui/conflicting-repr-hints.stderr
index 7a4e5a5488ad3..01b72d93823cc 100644
--- a/src/test/ui/conflicting-repr-hints.stderr
+++ b/src/test/ui/conflicting-repr-hints.stderr
@@ -1,47 +1,47 @@
 warning[E0566]: conflicting representation hints
-  --> $DIR/conflicting-repr-hints.rs:20:8
+  --> $DIR/conflicting-repr-hints.rs:19:8
    |
 LL | #[repr(C, u64)] //~ WARNING conflicting representation hints
    |        ^  ^^^
 
 warning[E0566]: conflicting representation hints
-  --> $DIR/conflicting-repr-hints.rs:23:8
+  --> $DIR/conflicting-repr-hints.rs:22:8
    |
 LL | #[repr(u32, u64)] //~ WARNING conflicting representation hints
    |        ^^^  ^^^
 
 error[E0587]: type has conflicting packed and align representation hints
-  --> $DIR/conflicting-repr-hints.rs:30:1
+  --> $DIR/conflicting-repr-hints.rs:29:1
    |
 LL | struct F(i32); //~ ERROR type has conflicting packed and align representation hints
    | ^^^^^^^^^^^^^^
 
 error[E0587]: type has conflicting packed and align representation hints
-  --> $DIR/conflicting-repr-hints.rs:34:1
+  --> $DIR/conflicting-repr-hints.rs:33:1
    |
 LL | struct G(i32); //~ ERROR type has conflicting packed and align representation hints
    | ^^^^^^^^^^^^^^
 
 error[E0587]: type has conflicting packed and align representation hints
-  --> $DIR/conflicting-repr-hints.rs:38:1
+  --> $DIR/conflicting-repr-hints.rs:37:1
    |
 LL | struct H(i32); //~ ERROR type has conflicting packed and align representation hints
    | ^^^^^^^^^^^^^^
 
 error[E0634]: type has conflicting packed representation hints
-  --> $DIR/conflicting-repr-hints.rs:41:1
+  --> $DIR/conflicting-repr-hints.rs:40:1
    |
 LL | struct I(i32); //~ ERROR type has conflicting packed representation hints
    | ^^^^^^^^^^^^^^
 
 error[E0634]: type has conflicting packed representation hints
-  --> $DIR/conflicting-repr-hints.rs:45:1
+  --> $DIR/conflicting-repr-hints.rs:44:1
    |
 LL | struct J(i32); //~ ERROR type has conflicting packed representation hints
    | ^^^^^^^^^^^^^^
 
 error[E0587]: type has conflicting packed and align representation hints
-  --> $DIR/conflicting-repr-hints.rs:51:1
+  --> $DIR/conflicting-repr-hints.rs:50:1
    |
 LL | / union X { //~ ERROR type has conflicting packed and align representation hints
 LL | |     i: i32
@@ -49,7 +49,7 @@ LL | | }
    | |_^
 
 error[E0587]: type has conflicting packed and align representation hints
-  --> $DIR/conflicting-repr-hints.rs:57:1
+  --> $DIR/conflicting-repr-hints.rs:56:1
    |
 LL | / union Y { //~ ERROR type has conflicting packed and align representation hints
 LL | |     i: i32
@@ -57,7 +57,7 @@ LL | | }
    | |_^
 
 error[E0587]: type has conflicting packed and align representation hints
-  --> $DIR/conflicting-repr-hints.rs:63:1
+  --> $DIR/conflicting-repr-hints.rs:62:1
    |
 LL | / union Z { //~ ERROR type has conflicting packed and align representation hints
 LL | |     i: i32
diff --git a/src/test/ui/feature-gates/feature-gate-repr_packed.rs b/src/test/ui/feature-gates/feature-gate-repr_packed.rs
deleted file mode 100644
index 65e3be288fdf7..0000000000000
--- a/src/test/ui/feature-gates/feature-gate-repr_packed.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2018 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.
-
-#[repr(packed(1))] //~ error: the `#[repr(packed(n))]` attribute is experimental
-struct Foo(u64);
-
-#[repr(C)]
-#[repr(packed(1))] //~ error: the `#[repr(packed(n))]` attribute is experimental
-struct Bar(u64);
-
-fn main() {}
diff --git a/src/test/ui/feature-gates/feature-gate-repr_packed.stderr b/src/test/ui/feature-gates/feature-gate-repr_packed.stderr
deleted file mode 100644
index ed89a3f6b3169..0000000000000
--- a/src/test/ui/feature-gates/feature-gate-repr_packed.stderr
+++ /dev/null
@@ -1,19 +0,0 @@
-error[E0658]: the `#[repr(packed(n))]` attribute is experimental (see issue #33158)
-  --> $DIR/feature-gate-repr_packed.rs:11:1
-   |
-LL | #[repr(packed(1))] //~ error: the `#[repr(packed(n))]` attribute is experimental
-   | ^^^^^^^^^^^^^^^^^^
-   |
-   = help: add #![feature(repr_packed)] to the crate attributes to enable
-
-error[E0658]: the `#[repr(packed(n))]` attribute is experimental (see issue #33158)
-  --> $DIR/feature-gate-repr_packed.rs:15:1
-   |
-LL | #[repr(packed(1))] //~ error: the `#[repr(packed(n))]` attribute is experimental
-   | ^^^^^^^^^^^^^^^^^^
-   |
-   = help: add #![feature(repr_packed)] to the crate attributes to enable
-
-error: aborting due to 2 previous errors
-
-For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/print_type_sizes/packed.rs b/src/test/ui/print_type_sizes/packed.rs
index bc11146aa8516..9ff794178fcfa 100644
--- a/src/test/ui/print_type_sizes/packed.rs
+++ b/src/test/ui/print_type_sizes/packed.rs
@@ -21,7 +21,6 @@
 
 #![allow(dead_code)]
 #![feature(start)]
-#![feature(repr_packed)]
 
 #[derive(Default)]
 #[repr(packed)]

From e5e19d960815a66d9094a817319ca92c7ed13872 Mon Sep 17 00:00:00 2001
From: Taylor Cramer <cramertj@google.com>
Date: Fri, 21 Dec 2018 10:37:55 -0800
Subject: [PATCH 2/2] Remove unstable-book repr-packed entry

---
 .../unstable-book/src/language-features/repr-packed.md    | 8 --------
 1 file changed, 8 deletions(-)
 delete mode 100644 src/doc/unstable-book/src/language-features/repr-packed.md

diff --git a/src/doc/unstable-book/src/language-features/repr-packed.md b/src/doc/unstable-book/src/language-features/repr-packed.md
deleted file mode 100644
index 2dd763d04b0ab..0000000000000
--- a/src/doc/unstable-book/src/language-features/repr-packed.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# `repr_packed`
-
-The tracking issue for this feature is [#33158]
-
-[#33158]: https://github.com/rust-lang/rust/issues/33158
-
-------------------------
-