diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 2b2f925306d9a..90a635fdf44fe 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -1776,7 +1776,13 @@ impl<'a> Parser<'a> {
 
     pub fn parse_path_common(&mut self, style: PathStyle, enable_warning: bool)
                              -> PResult<'a, ast::Path> {
-        maybe_whole!(self, NtPath, |x| x);
+        maybe_whole!(self, NtPath, |path| {
+            if style == PathStyle::Mod &&
+               path.segments.iter().any(|segment| segment.parameters.is_some()) {
+                self.diagnostic().span_err(path.span, "unexpected generic arguments in path");
+            }
+            path
+        });
 
         let lo = self.meta_var_span.unwrap_or(self.span);
         let mut segments = Vec::new();
diff --git a/src/test/compile-fail/issue-43424.rs b/src/test/compile-fail/issue-43424.rs
new file mode 100644
index 0000000000000..431fc8a5aa2b2
--- /dev/null
+++ b/src/test/compile-fail/issue-43424.rs
@@ -0,0 +1,22 @@
+// Copyright 2017 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.
+
+#![allow(unused)]
+
+macro_rules! m {
+    ($attr_path: path) => {
+        #[$attr_path]
+        fn f() {}
+    }
+}
+
+m!(inline<u8>); //~ ERROR: unexpected generic arguments in path
+
+fn main() {}
diff --git a/src/test/ui/span/import-ty-params.rs b/src/test/ui/span/import-ty-params.rs
index d1e3d20f4ba1e..793ea68beba13 100644
--- a/src/test/ui/span/import-ty-params.rs
+++ b/src/test/ui/span/import-ty-params.rs
@@ -21,10 +21,10 @@ macro_rules! import {
 }
 
 fn f1() {
-    import! { a::b::c::S<u8> } //~ ERROR generic arguments in import path
+    import! { a::b::c::S<u8> } //~ ERROR unexpected generic arguments in path
 }
 fn f2() {
-    import! { a::b::c::S<> } //~ ERROR generic arguments in import path
+    import! { a::b::c::S<> } //~ ERROR unexpected generic arguments in path
 }
 
 fn main() {}
diff --git a/src/test/ui/span/import-ty-params.stderr b/src/test/ui/span/import-ty-params.stderr
index de959a14cc5bb..e2c3e34c47160 100644
--- a/src/test/ui/span/import-ty-params.stderr
+++ b/src/test/ui/span/import-ty-params.stderr
@@ -1,14 +1,14 @@
-error: generic arguments in import path
-  --> $DIR/import-ty-params.rs:24:25
+error: unexpected generic arguments in path
+  --> $DIR/import-ty-params.rs:24:15
    |
-24 |     import! { a::b::c::S<u8> } //~ ERROR generic arguments in import path
-   |                         ^^^^
+24 |     import! { a::b::c::S<u8> } //~ ERROR unexpected generic arguments in path
+   |               ^^^^^^^^^^^^^^
 
-error: generic arguments in import path
-  --> $DIR/import-ty-params.rs:27:25
+error: unexpected generic arguments in path
+  --> $DIR/import-ty-params.rs:27:15
    |
-27 |     import! { a::b::c::S<> } //~ ERROR generic arguments in import path
-   |                         ^^
+27 |     import! { a::b::c::S<> } //~ ERROR unexpected generic arguments in path
+   |               ^^^^^^^^^^^^
 
 error: aborting due to 2 previous errors
 
diff --git a/src/test/ui/span/macro-ty-params.rs b/src/test/ui/span/macro-ty-params.rs
index 08a7518dff9d7..c2443b024ceb2 100644
--- a/src/test/ui/span/macro-ty-params.rs
+++ b/src/test/ui/span/macro-ty-params.rs
@@ -16,16 +16,6 @@ macro_rules! m {
 
 fn main() {
     foo::<T>!();
-    //~^ ERROR generic arguments in macro path
-    //~| ERROR generic arguments in macro path
-    //~| ERROR generic arguments in macro path
     foo::<>!();
-    //~^ ERROR generic arguments in macro path
-    //~| ERROR generic arguments in macro path
-    //~| ERROR generic arguments in macro path
     m!(MyTrait<>);
-    //~^ ERROR generic arguments in macro path
-    //~| ERROR generic arguments in macro path
-    //~| ERROR generic arguments in macro path
-    //~| ERROR generic arguments in macro path
 }
diff --git a/src/test/ui/span/macro-ty-params.stderr b/src/test/ui/span/macro-ty-params.stderr
index f7115a0482666..1d2f7bb2f07e9 100644
--- a/src/test/ui/span/macro-ty-params.stderr
+++ b/src/test/ui/span/macro-ty-params.stderr
@@ -1,3 +1,15 @@
+error: unexpected generic arguments in path
+  --> $DIR/macro-ty-params.rs:20:8
+   |
+20 |     m!(MyTrait<>);
+   |        ^^^^^^^^^
+
+error: unexpected generic arguments in path
+  --> $DIR/macro-ty-params.rs:20:8
+   |
+20 |     m!(MyTrait<>);
+   |        ^^^^^^^^^
+
 error: generic arguments in macro path
   --> $DIR/macro-ty-params.rs:18:8
    |
@@ -5,16 +17,16 @@ error: generic arguments in macro path
    |        ^^^^^
 
 error: generic arguments in macro path
-  --> $DIR/macro-ty-params.rs:22:8
+  --> $DIR/macro-ty-params.rs:19:8
    |
-22 |     foo::<>!();
+19 |     foo::<>!();
    |        ^^^^
 
 error: generic arguments in macro path
-  --> $DIR/macro-ty-params.rs:26:15
+  --> $DIR/macro-ty-params.rs:20:15
    |
-26 |     m!(MyTrait<>);
+20 |     m!(MyTrait<>);
    |               ^^
 
-error: aborting due to 3 previous errors
+error: aborting due to 5 previous errors
 
diff --git a/src/test/ui/span/visibility-ty-params.rs b/src/test/ui/span/visibility-ty-params.rs
index 8d4817e80b95c..2a4a5edd04c08 100644
--- a/src/test/ui/span/visibility-ty-params.rs
+++ b/src/test/ui/span/visibility-ty-params.rs
@@ -13,11 +13,11 @@ macro_rules! m {
 }
 
 struct S<T>(T);
-m!{ S<u8> } //~ ERROR generic arguments in visibility path
+m!{ S<u8> } //~ ERROR unexpected generic arguments in path
 //~^ ERROR expected module, found struct `S`
 
 mod m {
-    m!{ m<> } //~ ERROR generic arguments in visibility path
+    m!{ m<> } //~ ERROR unexpected generic arguments in path
 }
 
 fn main() {}
diff --git a/src/test/ui/span/visibility-ty-params.stderr b/src/test/ui/span/visibility-ty-params.stderr
index 344cf69748ecc..673b9a38e035f 100644
--- a/src/test/ui/span/visibility-ty-params.stderr
+++ b/src/test/ui/span/visibility-ty-params.stderr
@@ -1,22 +1,14 @@
-error: generic arguments in visibility path
-  --> $DIR/visibility-ty-params.rs:16:6
-   |
-16 | m!{ S<u8> } //~ ERROR generic arguments in visibility path
-   |      ^^^^
-
-error: generic arguments in visibility path
-  --> $DIR/visibility-ty-params.rs:20:10
+error: unexpected generic arguments in path
+  --> $DIR/visibility-ty-params.rs:16:5
    |
-20 |     m!{ m<> } //~ ERROR generic arguments in visibility path
-   |          ^^
+16 | m!{ S<u8> } //~ ERROR unexpected generic arguments in path
+   |     ^^^^^
 
-error[E0577]: expected module, found struct `S`
-  --> $DIR/visibility-ty-params.rs:16:5
+error: unexpected generic arguments in path
+  --> $DIR/visibility-ty-params.rs:20:9
    |
-16 | m!{ S<u8> } //~ ERROR generic arguments in visibility path
-   |     -^^^^
-   |     |
-   |     did you mean `m`?
+20 |     m!{ m<> } //~ ERROR unexpected generic arguments in path
+   |         ^^^
 
-error: aborting due to 3 previous errors
+error: aborting due to 2 previous errors