Merge branch master into next
diff --git a/src/expr.rs b/src/expr.rs
index 1f4e1bd..2be23fd 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -2416,12 +2416,23 @@
     #[cfg(feature = "full")]
     impl Synom for ExprUnsafe {
         named!(parse -> Self, do_parse!(
+            outer_attrs: many0!(Attribute::old_parse_outer) >>
             unsafe_: keyword!(unsafe) >>
-            b: syn!(Block) >>
+            block: braces!(tuple!(
+                many0!(Attribute::old_parse_inner),
+                call!(Block::parse_within),
+            )) >>
             (ExprUnsafe {
-                attrs: Vec::new(),
+                attrs: {
+                    let mut attrs = outer_attrs;
+                    attrs.extend((block.1).0);
+                    attrs
+                },
                 unsafe_token: unsafe_,
-                block: b,
+                block: Block {
+                    brace_token: block.0,
+                    stmts: (block.1).1,
+                },
             })
         ));
 
@@ -3455,7 +3466,10 @@
         fn to_tokens(&self, tokens: &mut TokenStream) {
             outer_attrs_to_tokens(&self.attrs, tokens);
             self.unsafe_token.to_tokens(tokens);
-            self.block.to_tokens(tokens);
+            self.block.brace_token.surround(tokens, |tokens| {
+                inner_attrs_to_tokens(&self.attrs, tokens);
+                tokens.append_all(&self.block.stmts);
+            });
         }
     }