forked from OSchip/llvm-project
Use "()" instead of "(void)" when pretty-printing a parameter-less function type for C++.
llvm-svn: 72747
This commit is contained in:
parent
fc262babc3
commit
b1d51aa18a
|
@ -1410,7 +1410,7 @@ void FunctionProtoType::getAsStringInternal(std::string &S, const PrintingPolicy
|
|||
if (getNumArgs())
|
||||
S += ", ";
|
||||
S += "...";
|
||||
} else if (getNumArgs() == 0) {
|
||||
} else if (getNumArgs() == 0 && !Policy.CPlusPlus) {
|
||||
// Do not emit int() if we have a proto, emit 'int(void)'.
|
||||
S += "void";
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ static void ConvertArgToStringFn(Diagnostic::ArgumentKind Kind, intptr_t Val,
|
|||
// Not va_list.
|
||||
Ty.getUnqualifiedType() != Context.getBuiltinVaListType()) {
|
||||
S = "'"+S+"' (aka '";
|
||||
S += DesugaredTy.getAsString();
|
||||
S += DesugaredTy.getAsString(Context.PrintingPolicy);
|
||||
S += "')";
|
||||
Output.append(S.begin(), S.end());
|
||||
return;
|
||||
|
|
|
@ -5,9 +5,9 @@ void f() {
|
|||
int x, *px;
|
||||
|
||||
// Type id.
|
||||
(T())x; // expected-error {{used type 'T (void)'}}
|
||||
(T())+x; // expected-error {{used type 'T (void)'}}
|
||||
(T())*px; // expected-error {{used type 'T (void)'}}
|
||||
(T())x; // expected-error {{used type 'T ()'}}
|
||||
(T())+x; // expected-error {{used type 'T ()'}}
|
||||
(T())*px; // expected-error {{used type 'T ()'}}
|
||||
|
||||
// Expression.
|
||||
x = (T());
|
||||
|
|
|
@ -58,6 +58,6 @@ short *bad_const_cast_test(char const *volatile *const volatile *var)
|
|||
// Function pointers.
|
||||
f fp2 = const_cast<f>(fp1); // expected-error {{const_cast to 'f' (aka 'int (*)(int)'), which is not a reference, pointer-to-object, or pointer-to-data-member}}
|
||||
void (A::*mfn)() = 0;
|
||||
(void)const_cast<void (A::*)()>(mfn); // expected-error {{const_cast to 'void (struct A::*)(void)', which is not a reference, pointer-to-object, or pointer-to-data-member}}
|
||||
(void)const_cast<void (A::*)()>(mfn); // expected-error {{const_cast to 'void (struct A::*)()', which is not a reference, pointer-to-object, or pointer-to-data-member}}
|
||||
return **var3;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ void f() {
|
|||
(int(1)); // expected-warning {{expression result unused}}
|
||||
|
||||
// type-id
|
||||
(int())1; // expected-error {{used type 'int (void)' where arithmetic or pointer type is required}}
|
||||
(int())1; // expected-error {{used type 'int ()' where arithmetic or pointer type is required}}
|
||||
|
||||
// Declarations.
|
||||
int fd(T(a)); // expected-warning {{parentheses were disambiguated as a function declarator}}
|
||||
|
|
|
@ -28,6 +28,6 @@ struct B {
|
|||
A *f0();
|
||||
};
|
||||
int f0(B *b) {
|
||||
return b->f0->f0; // expected-error{{member reference base type 'struct A *(void)' is not a structure or union}} \
|
||||
return b->f0->f0; // expected-error{{member reference base type 'struct A *()' is not a structure or union}} \
|
||||
// expected-note{{perhaps you meant to call this function}}
|
||||
}
|
||||
|
|
|
@ -80,11 +80,11 @@ void memptrs()
|
|||
void (structure::*psf)() = 0;
|
||||
(void)reinterpret_cast<int (structure::*)()>(psf);
|
||||
|
||||
(void)reinterpret_cast<void (structure::*)()>(psi); // expected-error {{reinterpret_cast from 'int const struct structure::*' to 'void (struct structure::*)(void)' is not allowed}}
|
||||
(void)reinterpret_cast<int structure::*>(psf); // expected-error {{reinterpret_cast from 'void (struct structure::*)(void)' to 'int struct structure::*' is not allowed}}
|
||||
(void)reinterpret_cast<void (structure::*)()>(psi); // expected-error {{reinterpret_cast from 'int const struct structure::*' to 'void (struct structure::*)()' is not allowed}}
|
||||
(void)reinterpret_cast<int structure::*>(psf); // expected-error {{reinterpret_cast from 'void (struct structure::*)()' to 'int struct structure::*' is not allowed}}
|
||||
|
||||
// Cannot cast from integers to member pointers, not even the null pointer
|
||||
// literal.
|
||||
(void)reinterpret_cast<void (structure::*)()>(0); // expected-error {{reinterpret_cast from 'int' to 'void (struct structure::*)(void)' is not allowed}}
|
||||
(void)reinterpret_cast<void (structure::*)()>(0); // expected-error {{reinterpret_cast from 'int' to 'void (struct structure::*)()' is not allowed}}
|
||||
(void)reinterpret_cast<int structure::*>(0); // expected-error {{reinterpret_cast from 'int' to 'int struct structure::*' is not allowed}}
|
||||
}
|
||||
|
|
|
@ -115,7 +115,7 @@ void t_529_10()
|
|||
// Bad code below
|
||||
|
||||
(void)static_cast<int*>((const void*)0); // expected-error {{static_cast from 'void const *' to 'int *' casts away constness}}
|
||||
(void)static_cast<void (*)()>((void*)0); // expected-error {{static_cast from 'void *' to 'void (*)(void)' is not allowed}}
|
||||
(void)static_cast<void (*)()>((void*)0); // expected-error {{static_cast from 'void *' to 'void (*)()' is not allowed}}
|
||||
}
|
||||
|
||||
// Member pointer upcast.
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
|
||||
void bar(id(^)(void));
|
||||
void foo(id <NSObject>(^objectCreationBlock)(void)) {
|
||||
return bar(objectCreationBlock); // expected-warning{{incompatible pointer types passing 'id (^)(void)', expected 'id<NSObject> (^)(void)'}}
|
||||
return bar(objectCreationBlock); // expected-warning{{incompatible pointer types passing 'id (^)()', expected 'id<NSObject> (^)()'}}
|
||||
}
|
||||
|
||||
void bar2(id(*)(void));
|
||||
void foo2(id <NSObject>(*objectCreationBlock)(void)) {
|
||||
return bar2(objectCreationBlock); // expected-warning{{incompatible pointer types passing 'id (*)(void)', expected 'id<NSObject> (*)(void)'}}
|
||||
return bar2(objectCreationBlock); // expected-warning{{incompatible pointer types passing 'id (*)()', expected 'id<NSObject> (*)()'}}
|
||||
}
|
||||
|
||||
void bar3(id(*)()); // expected-note{{candidate function}}
|
||||
|
|
|
@ -3,7 +3,7 @@ template<int N> struct A; // expected-note 5{{template parameter is declared her
|
|||
|
||||
A<0> *a0;
|
||||
|
||||
A<int()> *a1; // expected-error{{template argument for non-type template parameter is treated as type 'int (void)'}}
|
||||
A<int()> *a1; // expected-error{{template argument for non-type template parameter is treated as type 'int ()'}}
|
||||
|
||||
A<int> *a2; // expected-error{{template argument for non-type template parameter must be an expression}}
|
||||
|
||||
|
|
Loading…
Reference in New Issue