Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed grammatical error in "enum specifier" error msg #94443 #94592

Merged
merged 1 commit into from
Jun 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions clang/include/clang/Basic/DiagnosticSemaKinds.td
Original file line number Diff line number Diff line change
Expand Up @@ -6088,9 +6088,9 @@ def err_redefinition_different_concept : Error<
"redefinition of concept %0 with different template parameters or requirements">;
def err_tag_reference_non_tag : Error<
"%select{non-struct type|non-class type|non-union type|non-enum "
"type|typedef|type alias|template|type alias template|template "
"template argument}1 %0 cannot be referenced with a "
"%select{struct|interface|union|class|enum}2 specifier">;
"type|typedef|type alias|template|alias template|template "
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are you removing "type" from "type alias template"? Why are you keeping "type" in "type alias"?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is using the standard term "alias template" as defined in [temp.alias] p1. As for "type alias", the standard doesn't refer to alias-declarations by any other name. I suppose the pedantically correct phrasing would be to refer to typedefs and alias-declarations as typedef-names.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change makes sense now, thank you.

"template argument}1 %0 cannot be referenced with the '"
"%select{struct|interface|union|class|enum}2' specifier">;
def err_tag_reference_conflict : Error<
"implicit declaration introduced by elaborated type conflicts with a "
"%select{non-struct type|non-class type|non-union type|non-enum "
Expand Down
4 changes: 2 additions & 2 deletions clang/test/CXX/basic/basic.lookup/basic.lookup.elab/p2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace test0 {
typedef int A; // expected-note {{declared here}}

int test() {
struct A a; // expected-error {{typedef 'A' cannot be referenced with a struct specifier}}
struct A a; // expected-error {{typedef 'A' cannot be referenced with the 'struct' specifier}}
return a.foo;
}
}
Expand All @@ -18,7 +18,7 @@ namespace test0 {
template <class> class A; // expected-note {{declared here}}

int test() {
struct A a; // expected-error {{template 'A' cannot be referenced with a struct specifier}}
struct A a; // expected-error {{template 'A' cannot be referenced with the 'struct' specifier}}
return a.foo;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

struct A { typedef int type; };
template<typename T> using X = A; // expected-note {{declared here}}
struct X<int>* p2; // expected-error {{type alias template 'X' cannot be referenced with a struct specifier}}
struct X<int>* p2; // expected-error {{alias template 'X' cannot be referenced with the 'struct' specifier}}


template<typename T> using Id = T; // expected-note {{declared here}}
template<template<typename> class F>
struct Y {
struct F<int> i; // expected-error {{type alias template 'Id' cannot be referenced with a struct specifier}}
struct F<int> i; // expected-error {{alias template 'Id' cannot be referenced with the 'struct' specifier}}
typename F<A>::type j; // ok

// FIXME: don't produce the diagnostic both for the definition and the instantiation.
template<typename T> using U = F<char>; // expected-note 2{{declared here}}
struct Y<F>::template U<char> k; // expected-error 2{{type alias template 'U' cannot be referenced with a struct specifier}}
struct Y<F>::template U<char> k; // expected-error 2{{alias template 'U' cannot be referenced with the 'struct' specifier}}
typename Y<F>::template U<char> l; // ok
};
template struct Y<Id>; // expected-note {{requested here}}
6 changes: 3 additions & 3 deletions clang/test/CXX/drs/cwg2xx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -759,7 +759,7 @@ namespace cwg254 { // cwg254: 2.9
typedef typename T::type type; // ok even if this is a typedef-name, because
// it's not an elaborated-type-specifier
typedef struct T::type foo;
// expected-error@-1 {{typedef 'type' cannot be referenced with a struct specifier}}
// expected-error@-1 {{typedef 'type' cannot be referenced with the 'struct' specifier}}
// expected-note@#cwg254-instantiation {{in instantiation of template class 'cwg254::A<cwg254::C>' requested here}}
// expected-note@#cwg254-C {{declared here}}
};
Expand Down Expand Up @@ -1264,10 +1264,10 @@ namespace cwg298 { // cwg298: 3.1

struct A a;
struct B b;
// expected-error@-1 {{typedef 'B' cannot be referenced with a struct specifier}}
// expected-error@-1 {{typedef 'B' cannot be referenced with the 'struct' specifier}}
// expected-note@#cwg298-B {{declared here}}
struct C c;
// expected-error@-1 {{typedef 'C' cannot be referenced with a struct specifier}}
// expected-error@-1 {{typedef 'C' cannot be referenced with the 'struct' specifier}}
// expected-note@#cwg298-C {{declared here}}

B::B() {}
Expand Down
2 changes: 1 addition & 1 deletion clang/test/CXX/drs/cwg4xx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ namespace cwg407 { // cwg407: 3.8
{
typedef struct S S; // #cwg407-typedef-S
struct S *p;
// expected-error@-1 {{typedef 'S' cannot be referenced with a struct specifier}}
// expected-error@-1 {{typedef 'S' cannot be referenced with the 'struct' specifier}}
// expected-note@#cwg407-typedef-S {{declared here}}
}
}
Expand Down
2 changes: 1 addition & 1 deletion clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ namespace test7 {

// This shouldn't crash.
template <class T> class D {
friend class A; // expected-error {{template 'A' cannot be referenced with a class specifier}}
friend class A; // expected-error {{template 'A' cannot be referenced with the 'class' specifier}}
};
template class D<int>;
}
Expand Down
2 changes: 1 addition & 1 deletion clang/test/CXX/temp/temp.spec/no-body.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ namespace good { // Only good in C++98/03

namespace unsupported {
#ifndef FIXING
template struct y; // expected-error {{template 'y' cannot be referenced with a struct specifier}}
template struct y; // expected-error {{template 'y' cannot be referenced with the 'struct' specifier}}
#endif
}

Expand Down
2 changes: 1 addition & 1 deletion clang/test/SemaCXX/PR8755.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ struct A {

template <typename T>
void f() {
class A <T> ::iterator foo; // expected-error{{typedef 'iterator' cannot be referenced with a class specifier}}
class A <T> ::iterator foo; // expected-error{{typedef 'iterator' cannot be referenced with the 'class' specifier}}
}

void g() {
Expand Down
2 changes: 1 addition & 1 deletion clang/test/SemaCXX/using-decl-templates.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ namespace aliastemplateinst {
template<typename T> struct A { };
template<typename T> using APtr = A<T*>; // expected-note{{previous use is here}}

template struct APtr<int>; // expected-error{{type alias template 'APtr' cannot be referenced with a struct specifier}}
template struct APtr<int>; // expected-error{{alias template 'APtr' cannot be referenced with the 'struct' specifier}}
}

namespace DontDiagnoseInvalidTest {
Expand Down
2 changes: 1 addition & 1 deletion clang/test/SemaTemplate/template-id-expr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ template <template <typename> class D>
class E {
template class D<C>; // expected-error {{expected '<' after 'template'}}
template<> class D<C>; // expected-error {{cannot specialize a template template parameter}}
friend class D<C>; // expected-error {{type alias template 'D' cannot be referenced with a class specifier}}
friend class D<C>; // expected-error {{alias template 'D' cannot be referenced with the 'class' specifier}}
};
#if __cplusplus <= 199711L
// expected-warning@+2 {{extension}}
Expand Down
Loading