From 0603a731f40015849e82d4f00c90899bb01898ec Mon Sep 17 00:00:00 2001 From: Kyle Simpson Date: Fri, 20 Jul 2018 14:12:57 +0100 Subject: Add test case for #50865 regression. --- .../auxiliary/lib.rs | 24 ++++++++++++++++++++++ .../issue-50865-private-impl-trait/main.rs | 20 ++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/test/run-pass/issue-50865-private-impl-trait/auxiliary/lib.rs create mode 100644 src/test/run-pass/issue-50865-private-impl-trait/main.rs (limited to 'src/test') diff --git a/src/test/run-pass/issue-50865-private-impl-trait/auxiliary/lib.rs b/src/test/run-pass/issue-50865-private-impl-trait/auxiliary/lib.rs new file mode 100644 index 00000000000..bf4f13360be --- /dev/null +++ b/src/test/run-pass/issue-50865-private-impl-trait/auxiliary/lib.rs @@ -0,0 +1,24 @@ +// Copyright 2016 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. + +#![crate_type = "lib"] + +pub fn bar

( // Error won't happen if "bar" is not generic + _baz: P, +) { + hide_foo()(); +} + +fn hide_foo() -> impl Fn() { // Error won't happen if "iterate" hasn't impl Trait or has generics + foo +} + +fn foo() { // Error won't happen if "foo" isn't used in "iterate" or has generics +} diff --git a/src/test/run-pass/issue-50865-private-impl-trait/main.rs b/src/test/run-pass/issue-50865-private-impl-trait/main.rs new file mode 100644 index 00000000000..7e92e107981 --- /dev/null +++ b/src/test/run-pass/issue-50865-private-impl-trait/main.rs @@ -0,0 +1,20 @@ +// Copyright 2016 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. + +// aux-build:lib.rs + +// Regression test for #50865. +// FIXME: explain. + +extern crate lib; + +fn main() { + lib::bar(()); // Error won't happen if bar is called from same crate +} -- cgit 1.4.1-3-g733a5 From 54b096a79913ad23b320d1f878046ae31e460061 Mon Sep 17 00:00:00 2001 From: Kyle Simpson Date: Tue, 21 Aug 2018 01:16:29 +0100 Subject: Fixes for code review. --- src/librustc/middle/privacy.rs | 1 - .../run-pass/issue-50865-private-impl-trait/auxiliary/lib.rs | 2 +- src/test/run-pass/issue-50865-private-impl-trait/main.rs | 9 +++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'src/test') diff --git a/src/librustc/middle/privacy.rs b/src/librustc/middle/privacy.rs index 39ddaca8925..70fed9af921 100644 --- a/src/librustc/middle/privacy.rs +++ b/src/librustc/middle/privacy.rs @@ -42,7 +42,6 @@ pub struct AccessLevels { impl AccessLevels { pub fn is_reachable(&self, id: Id) -> bool { - // self.map.contains_key(&id) self.map.get(&id) >= Some(&AccessLevel::Reachable) } pub fn is_exported(&self, id: Id) -> bool { diff --git a/src/test/run-pass/issue-50865-private-impl-trait/auxiliary/lib.rs b/src/test/run-pass/issue-50865-private-impl-trait/auxiliary/lib.rs index bf4f13360be..306256d53d3 100644 --- a/src/test/run-pass/issue-50865-private-impl-trait/auxiliary/lib.rs +++ b/src/test/run-pass/issue-50865-private-impl-trait/auxiliary/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// 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. // diff --git a/src/test/run-pass/issue-50865-private-impl-trait/main.rs b/src/test/run-pass/issue-50865-private-impl-trait/main.rs index 7e92e107981..c58e36c6542 100644 --- a/src/test/run-pass/issue-50865-private-impl-trait/main.rs +++ b/src/test/run-pass/issue-50865-private-impl-trait/main.rs @@ -1,4 +1,4 @@ -// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// 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. // @@ -11,7 +11,12 @@ // aux-build:lib.rs // Regression test for #50865. -// FIXME: explain. +// When using generics or specifying the type directly, this example +// codegens `foo` internally. However, when using a private `impl Trait` +// function which references another private item, `foo` (in this case) +// wouldn't be codegenned until main.rs used `bar`, as with impl Trait +// it is not cast to `fn()` automatically to satisfy e.g. +// `fn foo() -> fn() { ... }`. extern crate lib; -- cgit 1.4.1-3-g733a5 From 3536359ad8b02933018a7b26f0ad6c3ed6f0c50e Mon Sep 17 00:00:00 2001 From: Kyle Simpson Date: Tue, 21 Aug 2018 01:50:20 +0100 Subject: Further fixes. --- src/librustc_privacy/lib.rs | 4 ++-- src/test/run-pass/issue-50865-private-impl-trait/main.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/test') diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index b6b56cad839..f6b843bbac5 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -150,7 +150,7 @@ impl<'a, 'tcx> Visitor<'tcx> for EmbargoVisitor<'a, 'tcx> { } fn visit_item(&mut self, item: &'tcx hir::Item) { - debug!("Walked item {:?}", item); + debug!("visit_item({:?})", item); let inherited_item_level = match item.node { // Impls inherit level from their types and traits hir::ItemKind::Impl(..) => { @@ -184,7 +184,7 @@ impl<'a, 'tcx> Visitor<'tcx> for EmbargoVisitor<'a, 'tcx> { // Update level of the item itself let item_level = self.update(item.id, inherited_item_level); - debug!("Its privacy is believed to be: {:?}", item_level); + debug!("item_level = {:?}", item_level); // Update levels of nested things match item.node { diff --git a/src/test/run-pass/issue-50865-private-impl-trait/main.rs b/src/test/run-pass/issue-50865-private-impl-trait/main.rs index c58e36c6542..bc347edf8a7 100644 --- a/src/test/run-pass/issue-50865-private-impl-trait/main.rs +++ b/src/test/run-pass/issue-50865-private-impl-trait/main.rs @@ -16,7 +16,7 @@ // function which references another private item, `foo` (in this case) // wouldn't be codegenned until main.rs used `bar`, as with impl Trait // it is not cast to `fn()` automatically to satisfy e.g. -// `fn foo() -> fn() { ... }`. +// `fn foo() -> fn() { ... }`. extern crate lib; -- cgit 1.4.1-3-g733a5 From a6201f9a2b5c855a6747a8cecdf2f4830ac63f6e Mon Sep 17 00:00:00 2001 From: dylan_DPC Date: Wed, 22 Aug 2018 01:13:24 +0530 Subject: add testcase to existing macro testcase --- src/test/ui/lint/lints-in-foreign-macros.rs | 1 + src/test/ui/lint/lints-in-foreign-macros.stderr | 24 +++++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) (limited to 'src/test') diff --git a/src/test/ui/lint/lints-in-foreign-macros.rs b/src/test/ui/lint/lints-in-foreign-macros.rs index 0f9003877cc..34c15b15378 100644 --- a/src/test/ui/lint/lints-in-foreign-macros.rs +++ b/src/test/ui/lint/lints-in-foreign-macros.rs @@ -12,6 +12,7 @@ // compile-pass #![warn(unused_imports)] +#![warn(missing_docs)] //~ WARN: missing documentation for crate [missing_docs] #[macro_use] extern crate lints_in_foreign_macros; diff --git a/src/test/ui/lint/lints-in-foreign-macros.stderr b/src/test/ui/lint/lints-in-foreign-macros.stderr index e9f6d3d3815..e2df883cd4a 100644 --- a/src/test/ui/lint/lints-in-foreign-macros.stderr +++ b/src/test/ui/lint/lints-in-foreign-macros.stderr @@ -1,5 +1,5 @@ warning: unused import: `std::string::ToString` - --> $DIR/lints-in-foreign-macros.rs:20:16 + --> $DIR/lints-in-foreign-macros.rs:21:16 | LL | () => {use std::string::ToString;} //~ WARN: unused import | ^^^^^^^^^^^^^^^^^^^^^ @@ -14,14 +14,32 @@ LL | #![warn(unused_imports)] | ^^^^^^^^^^^^^^ warning: unused import: `std::string::ToString` - --> $DIR/lints-in-foreign-macros.rs:25:18 + --> $DIR/lints-in-foreign-macros.rs:26:18 | LL | mod c { baz!(use std::string::ToString;); } //~ WARN: unused import | ^^^^^^^^^^^^^^^^^^^^^ warning: unused import: `std::string::ToString` - --> $DIR/lints-in-foreign-macros.rs:26:19 + --> $DIR/lints-in-foreign-macros.rs:27:19 | LL | mod d { baz2!(use std::string::ToString;); } //~ WARN: unused import | ^^^^^^^^^^^^^^^^^^^^^ +warning: missing documentation for crate + --> $DIR/lints-in-foreign-macros.rs:14:1 + | +LL | / #![warn(unused_imports)] +LL | | #![warn(missing_docs)] //~ WARN: missing documentation for crate [missing_docs] +LL | | +LL | | #[macro_use] +... | +LL | | +LL | | fn main() {} + | |____________^ + | +note: lint level defined here + --> $DIR/lints-in-foreign-macros.rs:15:9 + | +LL | #![warn(missing_docs)] //~ WARN: missing documentation for crate [missing_docs] + | ^^^^^^^^^^^^ + -- cgit 1.4.1-3-g733a5 From c9c4f5ef784069319a36cf75d15dfaa604196071 Mon Sep 17 00:00:00 2001 From: varkor Date: Wed, 22 Aug 2018 12:15:29 +0100 Subject: Fix a grammatical mistake in "expected generic arguments" errors --- src/librustc_typeck/astconv.rs | 2 +- src/test/ui/generic/generic-impl-more-params-with-defaults.stderr | 2 +- src/test/ui/generic/generic-type-more-params-with-defaults.stderr | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src/test') diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index ccdb751bc4e..3f88bf829a8 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -371,7 +371,7 @@ impl<'o, 'gcx: 'tcx, 'tcx> dyn AstConv<'gcx, 'tcx>+'o { quantifier, bound, kind, - if required != 1 { "s" } else { "" }, + if bound != 1 { "s" } else { "" }, ) }; diff --git a/src/test/ui/generic/generic-impl-more-params-with-defaults.stderr b/src/test/ui/generic/generic-impl-more-params-with-defaults.stderr index b614da88ba1..6b54baefb1d 100644 --- a/src/test/ui/generic/generic-impl-more-params-with-defaults.stderr +++ b/src/test/ui/generic/generic-impl-more-params-with-defaults.stderr @@ -2,7 +2,7 @@ error[E0244]: wrong number of type arguments: expected at most 2, found 3 --> $DIR/generic-impl-more-params-with-defaults.rs:23:5 | LL | Vec::::new(); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected at most 2 type argument + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected at most 2 type arguments error: aborting due to previous error diff --git a/src/test/ui/generic/generic-type-more-params-with-defaults.stderr b/src/test/ui/generic/generic-type-more-params-with-defaults.stderr index f226921816d..684a22ce45c 100644 --- a/src/test/ui/generic/generic-type-more-params-with-defaults.stderr +++ b/src/test/ui/generic/generic-type-more-params-with-defaults.stderr @@ -2,7 +2,7 @@ error[E0244]: wrong number of type arguments: expected at most 2, found 3 --> $DIR/generic-type-more-params-with-defaults.rs:19:12 | LL | let _: Vec; - | ^^^^^^^^^^^^^^^^^^^^^^ expected at most 2 type argument + | ^^^^^^^^^^^^^^^^^^^^^^ expected at most 2 type arguments error: aborting due to previous error -- cgit 1.4.1-3-g733a5 From 8fbcb9c53c208f5482959474b44605935d797ccf Mon Sep 17 00:00:00 2001 From: dylan_DPC Date: Thu, 23 Aug 2018 01:56:39 +0530 Subject: add warning for missing docs --- src/test/ui/lint/lints-in-foreign-macros.rs | 3 ++- src/test/ui/lint/lints-in-foreign-macros.stderr | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'src/test') diff --git a/src/test/ui/lint/lints-in-foreign-macros.rs b/src/test/ui/lint/lints-in-foreign-macros.rs index 34c15b15378..2ad1cfe7168 100644 --- a/src/test/ui/lint/lints-in-foreign-macros.rs +++ b/src/test/ui/lint/lints-in-foreign-macros.rs @@ -12,7 +12,7 @@ // compile-pass #![warn(unused_imports)] -#![warn(missing_docs)] //~ WARN: missing documentation for crate [missing_docs] +#![warn(missing_docs)] #[macro_use] extern crate lints_in_foreign_macros; @@ -25,5 +25,6 @@ mod a { foo!(); } mod b { bar!(); } mod c { baz!(use std::string::ToString;); } //~ WARN: unused import mod d { baz2!(use std::string::ToString;); } //~ WARN: unused import +mod e { baz!(pub fn undocumented() {}); }//~ WARN: missing documentation for a function fn main() {} diff --git a/src/test/ui/lint/lints-in-foreign-macros.stderr b/src/test/ui/lint/lints-in-foreign-macros.stderr index e2df883cd4a..4a75e1d907d 100644 --- a/src/test/ui/lint/lints-in-foreign-macros.stderr +++ b/src/test/ui/lint/lints-in-foreign-macros.stderr @@ -29,17 +29,17 @@ warning: missing documentation for crate --> $DIR/lints-in-foreign-macros.rs:14:1 | LL | / #![warn(unused_imports)] -LL | | #![warn(missing_docs)] //~ WARN: missing documentation for crate [missing_docs] +LL | | #![warn(missing_docs)] LL | | LL | | #[macro_use] ... | LL | | -LL | | fn main() {} +LL | | fn main() {} //~ WARN: missing documentation for crate [missing_docs] | |____________^ | note: lint level defined here --> $DIR/lints-in-foreign-macros.rs:15:9 | -LL | #![warn(missing_docs)] //~ WARN: missing documentation for crate [missing_docs] +LL | #![warn(missing_docs)] | ^^^^^^^^^^^^ -- cgit 1.4.1-3-g733a5 From b188c2a4eb7a3eede8477e3fbeaea623fc256586 Mon Sep 17 00:00:00 2001 From: varkor Date: Tue, 21 Aug 2018 14:44:36 +0100 Subject: Lament the invincibility of the Turbofish --- src/test/ui/bastion-of-the-turbofish.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/test') diff --git a/src/test/ui/bastion-of-the-turbofish.rs b/src/test/ui/bastion-of-the-turbofish.rs index bd789737552..eadd2389609 100644 --- a/src/test/ui/bastion-of-the-turbofish.rs +++ b/src/test/ui/bastion-of-the-turbofish.rs @@ -36,6 +36,10 @@ // My heart aches in sorrow, for I know I am defeated. Let this be a warning // to all those who come after. Here stands the bastion of the Turbofish. +// See https://github.com/rust-lang/rust/pull/53562 +// and https://github.com/rust-lang/rfcs/pull/2527 +// for context. + fn main() { let (oh, woe, is, me) = ("the", "Turbofish", "remains", "undefeated"); let _: (bool, bool) = (oh(me)); -- cgit 1.4.1-3-g733a5 From 9e0ff24b6dbeaa549775ef77e5fdf8493f0f82da Mon Sep 17 00:00:00 2001 From: Corey Farwell Date: Thu, 23 Aug 2018 09:35:49 -0400 Subject: Prefer `.nth(n)` over `.skip(n).next()`. Found by clippy. --- src/libcore/fmt/mod.rs | 2 +- src/librustc_metadata/encoder.rs | 2 +- src/librustc_typeck/check/mod.rs | 2 +- src/test/run-pass-fulldeps/auxiliary/proc_macro_def.rs | 2 +- src/test/run-pass/command-before-exec.rs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/test') diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs index 928f95e3ba2..6ed90fdd4b6 100644 --- a/src/libcore/fmt/mod.rs +++ b/src/libcore/fmt/mod.rs @@ -1232,7 +1232,7 @@ impl<'a> Formatter<'a> { // If our string is longer that the precision, then we must have // truncation. However other flags like `fill`, `width` and `align` // must act as always. - if let Some((i, _)) = s.char_indices().skip(max).next() { + if let Some((i, _)) = s.char_indices().nth(max) { // LLVM here can't prove that `..i` won't panic `&s[..i]`, but // we know that it can't panic. Use `get` + `unwrap_or` to avoid // `unsafe` and otherwise don't emit any panic-related code diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs index 44d8d4a7277..8219ec3df24 100644 --- a/src/librustc_metadata/encoder.rs +++ b/src/librustc_metadata/encoder.rs @@ -1111,7 +1111,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> { let trait_ref = tcx.impl_trait_ref(def_id); let parent = if let Some(trait_ref) = trait_ref { let trait_def = tcx.trait_def(trait_ref.def_id); - trait_def.ancestors(tcx, def_id).skip(1).next().and_then(|node| { + trait_def.ancestors(tcx, def_id).nth(1).and_then(|node| { match node { specialization_graph::Node::Impl(parent) => Some(parent), _ => None, diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index aa05191cd4a..e88162bc1e9 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -1434,7 +1434,7 @@ fn check_specialization_validity<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, hir::ImplItemKind::Type(_) => ty::AssociatedKind::Type }; - let parent = ancestors.defs(tcx, trait_item.ident, kind, trait_def.def_id).skip(1).next() + let parent = ancestors.defs(tcx, trait_item.ident, kind, trait_def.def_id).nth(1) .map(|node_item| node_item.map(|parent| parent.defaultness)); if let Some(parent) = parent { diff --git a/src/test/run-pass-fulldeps/auxiliary/proc_macro_def.rs b/src/test/run-pass-fulldeps/auxiliary/proc_macro_def.rs index 9faa7366ec5..b9c565a9d3c 100644 --- a/src/test/run-pass-fulldeps/auxiliary/proc_macro_def.rs +++ b/src/test/run-pass-fulldeps/auxiliary/proc_macro_def.rs @@ -19,7 +19,7 @@ use proc_macro::*; #[proc_macro_attribute] pub fn attr_tru(_attr: TokenStream, item: TokenStream) -> TokenStream { - let name = item.into_iter().skip(1).next().unwrap(); + let name = item.into_iter().nth(1).unwrap(); quote!(fn $name() -> bool { true }) } diff --git a/src/test/run-pass/command-before-exec.rs b/src/test/run-pass/command-before-exec.rs index 9599f65da4e..c4fc9ee53fd 100644 --- a/src/test/run-pass/command-before-exec.rs +++ b/src/test/run-pass/command-before-exec.rs @@ -24,7 +24,7 @@ use std::sync::Arc; use std::sync::atomic::{AtomicUsize, Ordering}; fn main() { - if let Some(arg) = env::args().skip(1).next() { + if let Some(arg) = env::args().nth(1) { match &arg[..] { "test1" => println!("hello2"), "test2" => assert_eq!(env::var("FOO").unwrap(), "BAR"), -- cgit 1.4.1-3-g733a5 From 747722e44445bfb067bfbc84540c434170d538e8 Mon Sep 17 00:00:00 2001 From: dylan_DPC Date: Thu, 23 Aug 2018 23:21:54 +0530 Subject: fix testcase --- src/test/ui/lint/lints-in-foreign-macros.rs | 5 +++-- src/test/ui/lint/lints-in-foreign-macros.stderr | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) (limited to 'src/test') diff --git a/src/test/ui/lint/lints-in-foreign-macros.rs b/src/test/ui/lint/lints-in-foreign-macros.rs index 2ad1cfe7168..3785968df87 100644 --- a/src/test/ui/lint/lints-in-foreign-macros.rs +++ b/src/test/ui/lint/lints-in-foreign-macros.rs @@ -11,7 +11,7 @@ // aux-build:lints-in-foreign-macros.rs // compile-pass -#![warn(unused_imports)] +#![warn(unused_imports)] //~ missing documentation for crate [missing_docs] #![warn(missing_docs)] #[macro_use] @@ -25,6 +25,7 @@ mod a { foo!(); } mod b { bar!(); } mod c { baz!(use std::string::ToString;); } //~ WARN: unused import mod d { baz2!(use std::string::ToString;); } //~ WARN: unused import -mod e { baz!(pub fn undocumented() {}); }//~ WARN: missing documentation for a function +baz!(pub fn undocumented() {}); //~ WARN: missing documentation for a function +baz2!(pub fn undocumented2() {}); //~ WARN: missing documentation for a function fn main() {} diff --git a/src/test/ui/lint/lints-in-foreign-macros.stderr b/src/test/ui/lint/lints-in-foreign-macros.stderr index 4a75e1d907d..2ddca778123 100644 --- a/src/test/ui/lint/lints-in-foreign-macros.stderr +++ b/src/test/ui/lint/lints-in-foreign-macros.stderr @@ -10,7 +10,7 @@ LL | mod a { foo!(); } note: lint level defined here --> $DIR/lints-in-foreign-macros.rs:14:9 | -LL | #![warn(unused_imports)] +LL | #![warn(unused_imports)] //~ missing documentation for crate [missing_docs] | ^^^^^^^^^^^^^^ warning: unused import: `std::string::ToString` @@ -28,13 +28,13 @@ LL | mod d { baz2!(use std::string::ToString;); } //~ WARN: unused import warning: missing documentation for crate --> $DIR/lints-in-foreign-macros.rs:14:1 | -LL | / #![warn(unused_imports)] +LL | / #![warn(unused_imports)] //~ missing documentation for crate [missing_docs] LL | | #![warn(missing_docs)] LL | | LL | | #[macro_use] ... | LL | | -LL | | fn main() {} //~ WARN: missing documentation for crate [missing_docs] +LL | | fn main() {} | |____________^ | note: lint level defined here @@ -43,3 +43,15 @@ note: lint level defined here LL | #![warn(missing_docs)] | ^^^^^^^^^^^^ +warning: missing documentation for a function + --> $DIR/lints-in-foreign-macros.rs:28:6 + | +LL | baz!(pub fn undocumented() {}); //~ WARN: missing documentation for a function + | ^^^^^^^^^^^^^^^^^^^^^ + +warning: missing documentation for a function + --> $DIR/lints-in-foreign-macros.rs:29:7 + | +LL | baz2!(pub fn undocumented2() {}); //~ WARN: missing documentation for a function + | ^^^^^^^^^^^^^^^^^^^^^^ + -- cgit 1.4.1-3-g733a5