aboutsummaryrefslogtreecommitdiff
path: root/clang/test/Parser
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/Parser')
-rw-r--r--clang/test/Parser/DelayedTemplateParsing.cpp13
-rw-r--r--clang/test/Parser/cxx1z-class-template-argument-deduction.cpp6
-rw-r--r--clang/test/Parser/cxx1z-decomposition.cpp14
-rw-r--r--clang/test/Parser/cxx2c-binding-pack.cpp2
4 files changed, 22 insertions, 13 deletions
diff --git a/clang/test/Parser/DelayedTemplateParsing.cpp b/clang/test/Parser/DelayedTemplateParsing.cpp
index bcd286a..072c7ce 100644
--- a/clang/test/Parser/DelayedTemplateParsing.cpp
+++ b/clang/test/Parser/DelayedTemplateParsing.cpp
@@ -43,10 +43,10 @@ void undeclared()
}
-template <class T> void foo5() {} //expected-note {{previous definition is here}}
+template <class T> void foo5() {} //expected-note {{previous definition is here}}
template <class T> void foo5() {} // expected-error {{redefinition of 'foo5'}}
-
+
namespace PR11931 {
@@ -195,3 +195,12 @@ template <typename> struct PR38460_2 {
}
};
template struct PR38460_2<int>;
+
+namespace LateParsedAttrs {
+ template <class>
+ void f(int a) __attribute__((__diagnose_if__(a > 0, "foo", "error"))) {}
+ // expected-note@-1 {{from 'diagnose_if' attribute on 'f<int>'}}
+ void g() {
+ f<int>(1); // expected-error {{foo}}
+ }
+} // namespace LateParsedAttrs
diff --git a/clang/test/Parser/cxx1z-class-template-argument-deduction.cpp b/clang/test/Parser/cxx1z-class-template-argument-deduction.cpp
index 9d27f83..ece00a0 100644
--- a/clang/test/Parser/cxx1z-class-template-argument-deduction.cpp
+++ b/clang/test/Parser/cxx1z-class-template-argument-deduction.cpp
@@ -158,7 +158,7 @@ namespace decl {
A arr[3] = 0; // expected-error {{cannot form array of deduced class template specialization type}}
A F::*pm = 0; // expected-error {{cannot form pointer to deduced class template specialization type}}
A (*fp)() = 0; // expected-error {{cannot form function returning deduced class template specialization type}}
- A [x, y] = 0; // expected-error {{cannot be declared with type 'A'}} expected-error {{type 'A<int>' decomposes into 0 elements, but 2 names were provided}}
+ A [x, y] = 0; // expected-error {{cannot be declared with type 'A'}} expected-error {{type 'A<int>' binds to 0 elements, but 2 names were provided}}
}
namespace typename_specifier {
@@ -185,7 +185,7 @@ namespace typename_specifier {
typename ::A arr[3] = 0; // expected-error {{cannot form array of deduced class template specialization type}}
typename ::A F::*pm = 0; // expected-error {{cannot form pointer to deduced class template specialization type}}
typename ::A (*fp)() = 0; // expected-error {{cannot form function returning deduced class template specialization type}}
- typename ::A [x, y] = 0; // expected-error {{cannot be declared with type 'typename ::A'}} expected-error {{type 'typename ::A<int>' (aka 'A<int>') decomposes into 0}}
+ typename ::A [x, y] = 0; // expected-error {{cannot be declared with type 'typename ::A'}} expected-error {{type 'typename ::A<int>' (aka 'A<int>') binds to 0}}
struct X { template<typename T> struct A { A(T); }; }; // expected-note 8{{declared here}}
@@ -208,7 +208,7 @@ namespace typename_specifier {
{typename T::A arr[3] = 0;} // expected-error {{refers to class template member}}
{typename T::A F::*pm = 0;} // expected-error {{refers to class template member}}
{typename T::A (*fp)() = 0;} // expected-error {{refers to class template member}}
- {typename T::A [x, y] = 0;} // expected-error {{cannot be declared with type 'typename T::A'}} expected-error {{type 'typename typename_specifier::X::A<int>' (aka 'typename_specifier::X::A<int>') decomposes into 0}}
+ {typename T::A [x, y] = 0;} // expected-error {{cannot be declared with type 'typename T::A'}} expected-error {{type 'typename typename_specifier::X::A<int>' (aka 'typename_specifier::X::A<int>') binds to 0}}
}
template void f<X>(); // expected-note {{instantiation of}}
diff --git a/clang/test/Parser/cxx1z-decomposition.cpp b/clang/test/Parser/cxx1z-decomposition.cpp
index 274e24e..21c9419 100644
--- a/clang/test/Parser/cxx1z-decomposition.cpp
+++ b/clang/test/Parser/cxx1z-decomposition.cpp
@@ -5,7 +5,7 @@
struct S { int a, b, c; }; // expected-note 2 {{'S::a' declared here}}
-// A simple-declaration can be a decompsition declaration.
+// A simple-declaration can be a structured binding declaration.
namespace SimpleDecl {
auto [a_x, b_x, c_x] = S();
@@ -19,7 +19,7 @@ namespace SimpleDecl {
}
}
-// A for-range-declaration can be a decomposition declaration.
+// A for-range-declaration can be a structured binding declaration.
namespace ForRangeDecl {
extern S arr[10];
void h() {
@@ -100,12 +100,12 @@ namespace BadSpecifiers {
inline auto &[k] = n; // expected-error {{cannot be declared 'inline'}}
const int K = 5;
- auto ([c]) = s; // expected-error {{decomposition declaration cannot be declared with parentheses}}
+ auto ([c]) = s; // expected-error {{structured binding declaration cannot be declared with parentheses}}
void g() {
// defining-type-specifiers other than cv-qualifiers and 'auto'
S [a] = s; // expected-error {{cannot be declared with type 'S'}}
decltype(auto) [b] = s; // expected-error {{cannot be declared with type 'decltype(auto)'}}
- auto ([c2]) = s; // cxx17-error {{decomposition declaration cannot be declared with parenthese}} \
+ auto ([c2]) = s; // cxx17-error {{structured binding declaration cannot be declared with parenthese}} \
// post2b-error {{use of undeclared identifier 'c2'}} \
// post2b-error {{expected body of lambda expression}} \
@@ -114,7 +114,7 @@ namespace BadSpecifiers {
auto [e][1] = s; // expected-error {{expected ';'}} expected-error {{requires an initializer}}
// FIXME: This should fire the 'misplaced array declarator' diagnostic.
- int [K] arr = {0}; // expected-error {{expected ';'}} expected-error {{cannot be declared with type 'int'}} expected-error {{decomposition declaration '[K]' requires an initializer}}
+ int [K] arr = {0}; // expected-error {{expected ';'}} expected-error {{cannot be declared with type 'int'}} expected-error {{structured binding declaration '[K]' requires an initializer}}
int [5] arr = {0}; // expected-error {{place the brackets after the name}}
auto *[f] = s; // expected-error {{cannot be declared with type 'auto *'}} expected-error {{incompatible initializer}}
@@ -145,14 +145,14 @@ namespace MultiDeclarator {
namespace Template {
int n[3];
// Structured binding template is not allowed.
- template<typename T> auto [a, b, c] = n; // expected-error {{decomposition declaration cannot be a template}}
+ template<typename T> auto [a, b, c] = n; // expected-error {{structured binding declaration cannot be a template}}
}
namespace Init {
void f() {
int arr[1];
struct S { int n; };
- auto &[bad1]; // expected-error {{decomposition declaration '[bad1]' requires an initializer}}
+ auto &[bad1]; // expected-error {{structured binding declaration '[bad1]' requires an initializer}}
const auto &[bad2](S{}, S{}); // expected-error {{initializer for variable '[bad2]' with type 'const auto &' contains multiple expressions}}
const auto &[bad3](); // expected-error {{expected expression}}
auto &[good1] = arr;
diff --git a/clang/test/Parser/cxx2c-binding-pack.cpp b/clang/test/Parser/cxx2c-binding-pack.cpp
index 0daaad3..40d843e 100644
--- a/clang/test/Parser/cxx2c-binding-pack.cpp
+++ b/clang/test/Parser/cxx2c-binding-pack.cpp
@@ -12,7 +12,7 @@ void decompose_array() {
auto [...] = arr; // #2
// expected-error@#2{{expected identifier}}
// expected-error@#2{{{no names were provided}}}
- // expected-warning@#2{{{does not allow a decomposition group to be empty}}}
+ // expected-warning@#2{{{does not allow a structured binding group to be empty}}}
auto [a, ..., b] = arr; // #3
// expected-error@#3{{expected identifier}}
// expected-error@#3{{{only 1 name was provided}}}