1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#include <stddef.h> 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct A { 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void *operator new(size_t); 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace NS { 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void *operator new(size_t);; // expected-error {{'operator new' cannot be declared inside a namespace}} 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostatic void *operator new(size_t); // expected-error {{'operator new' cannot be declared static in global scope}} 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct B { 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void operator new(size_t); // expected-error {{'operator new' must return type 'void *'}} 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct C { 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void *operator new(); // expected-error {{'operator new' must have at least one parameter}} 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct D { 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void *operator new(bool); // expected-error {{'operator new' takes type size_t}} 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct E { 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void *operator new(size_t = 0); // expected-error {{parameter of 'operator new' cannot have a default argument}} 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct F { 31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao template<typename T> void *operator new(size_t, int); 32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct G { 35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao template<typename T> T operator new(size_t, int); // expected-error {{'operator new' cannot have a dependent return type; use 'void *' instead}} 36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct H { 39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao template<typename T> void *operator new(T, int); // expected-error {{'operator new' cannot take a dependent type as first parameter; use size_t}} 40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct I { 43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao template<typename T> void *operator new(size_t); // expected-error {{'operator new' template must have at least two parameters}} 44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 45