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 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstatic void *operator new(size_t); // expected-error {{static declaration of 'operator new' follows non-static declaration}} expected-note {{previous}} 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstatic void *operator new(size_t, int, int); // expected-error {{'operator new' cannot be declared static in global scope}} 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct B { 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void operator new(size_t); // expected-error {{'operator new' must return type 'void *'}} 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct C { 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void *operator new(); // expected-error {{'operator new' must have at least one parameter}} 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct D { 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void *operator new(bool); // expected-error {{'operator new' takes type size_t}} 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct E { 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void *operator new(size_t = 0); // expected-error {{parameter of 'operator new' cannot have a default argument}} 29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct F { 32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao template<typename T> void *operator new(size_t, int); 33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct G { 36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao template<typename T> T operator new(size_t, int); // expected-error {{'operator new' cannot have a dependent return type; use 'void *' instead}} 37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct H { 40ea285162342df160e7860e26528bc7110bc6c0cdShih-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}} 41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct I { 44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao template<typename T> void *operator new(size_t); // expected-error {{'operator new' template must have at least two parameters}} 45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 46