diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index fad8690810265c3a0f698e22a98155b48cb412c4..c90d91b7b8240d2aff112519ceda927ab565a8da 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2018-10-24  Jakub Jelinek  <jakub@redhat.com>
+
+	PR c++/86288
+	* parser.c (cp_parser_std_attribute): Canonicalize attr_ns, and when
+	:: is not present and attr_ns non-NULL, canonicalize also attr_id.
+	(cp_parser_attribute_spec): Fix comment typo.
+
 2018-10-24  Martin Sebor  <msebor@redhat.com>
 
 	PR c++/84851
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index c46b77608b21fe332565a6ecd5e90b2318948abe..2533871fb28afaa1d9b01e87ba15ced832d6274a 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -25327,14 +25327,19 @@ cp_parser_std_attribute (cp_parser *parser, tree attr_ns)
 	  return error_mark_node;
 	}
 
+      attr_ns = canonicalize_attr_name (attr_ns);
       attr_id = canonicalize_attr_name (attr_id);
       attribute = build_tree_list (build_tree_list (attr_ns, attr_id),
 				   NULL_TREE);
       token = cp_lexer_peek_token (parser->lexer);
     }
   else if (attr_ns)
-    attribute = build_tree_list (build_tree_list (attr_ns, attr_id),
-				 NULL_TREE);
+    {
+      attr_ns = canonicalize_attr_name (attr_ns);
+      attr_id = canonicalize_attr_name (attr_id);
+      attribute = build_tree_list (build_tree_list (attr_ns, attr_id),
+				   NULL_TREE);
+    }
   else
     {
       attr_id = canonicalize_attr_name (attr_id);
@@ -25526,7 +25531,7 @@ cp_parser_std_attribute_spec (cp_parser *parser)
 	  || !cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE))
 	cp_parser_skip_to_end_of_statement (parser);
       else
-	/* Warn about parsing c++11 attribute in non-c++1 mode, only
+	/* Warn about parsing c++11 attribute in non-c++11 mode, only
 	   when we are sure that we have actually parsed them.  */
 	maybe_warn_cpp0x (CPP0X_ATTRIBUTES);
     }
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6f9ba884e04afbf83cf0ce38e564b5fd435a6dac..96ef4b999bc554425d8b311aa7fabbd3cca41655 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-10-24  Jakub Jelinek  <jakub@redhat.com>
+
+	PR c++/86288
+	* g++.dg/cpp0x/gen-attrs-66.C: New test.
+
 2018-10-24  Martin Sebor  <msebor@redhat.com>
 
 	PR c++/84851
diff --git a/gcc/testsuite/g++.dg/cpp0x/gen-attrs-66.C b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-66.C
new file mode 100644
index 0000000000000000000000000000000000000000..de81dbb5a0374d9dab33565d9ff12d83e20ee1d6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/gen-attrs-66.C
@@ -0,0 +1,12 @@
+// PR c++/86288
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wattributes" }
+
+int a [[gnu::aligned(alignof(int))]];
+int b [[gnu::__aligned__(alignof(int))]];
+int c [[__gnu__::aligned(alignof(int))]];
+int d [[__gnu__::__aligned__(alignof(int))]];
+int e [[using gnu : aligned(alignof(int))]];		// { dg-warning "attribute using prefix only available" "" { target c++14_down } }
+int f [[using gnu : __aligned__(alignof(int))]];	// { dg-warning "attribute using prefix only available" "" { target c++14_down } }
+int g [[using __gnu__ : aligned(alignof(int))]];	// { dg-warning "attribute using prefix only available" "" { target c++14_down } }
+int h [[using __gnu__ : __aligned__(alignof(int))]];	// { dg-warning "attribute using prefix only available" "" { target c++14_down } }