Change:
Originally reported as this is reduced to: compiles with:
cc I'm not really sure what this classifies under, it seems like maybe although doesn't break it, only does. After though it may be broken by (I'm not 100% sure where this is happening)
I'm not really sure what this classifies under, it seems like maybe although doesn't break it This falls under and .
I hit this error last week when trying to update a crate that used 's derive macros. I found that ing the macro would give me the attribute error, but ing the crate worked.
I think that may be a separate bug, can you file a different issue? I believe I've fixed this issue in

Discussion:
Err(Determinacy::Determined) => {} } <ins> // Ok at this point we've determined that the `attr` above doesn't // actually resolve at this time, so we may want to report an error. // It could be the case, though, that `attr` won't ever resolve! If // there's a custom derive that could be used it might declare `attr` as // a custom attribute accepted by the derive. In this case we don't want // to report this particular invocation as unresolved, but rather we'd // want to move on to the next invocation. // // This loop here looks through all of the derive annotations in scope // and tries to resolve them. If they themselves successfully resolve // *and* the resolve mentions that this attribute's name is a registered // custom attribute then we flag this attribute as known and update // `invoc` above to point to the next invocation. // // By then returning `Undetermined` we should continue resolution to // resolve the next attribute. </ins> let attr_name = match path.segments.len() { 1 => path.segments[0].ident.name, _ => return Err(determinacy),

attrs.push(inert_attr); attrs }); <ins> return Err(Determinacy::Undetermined) </ins> } <del> return Err(Determinacy::Undetermined); </del> }, Err(Determinacy::Undetermined) => determinacy = Determinacy::Undetermined, Err(Determinacy::Determined) => {}

<ins> // 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. // no-prefer-dynamic #![crate_type = "proc-macro"] extern crate proc_macro; use proc_macro::TokenStream; #[proc_macro_derive(Foo)] pub fn foo(a: TokenStream) -> TokenStream { "".parse().unwrap() } #[proc_macro_derive(Bar, attributes(custom))] pub fn bar(a: TokenStream) -> TokenStream { "".parse().unwrap() } </ins>

<ins> // 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. // aux-build:custom-attr-only-one-derive.rs #![feature(rust_2018_preview)] #[macro_use] extern crate custom_attr_only_one_derive; #[derive(Bar, Foo)] #[custom = "test"] pub enum A { B, C, } fn main() {} </ins>