1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify -fexceptions %s 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotypedef __SIZE_TYPE__ size_t; 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Operator delete template for placement new with global lookup 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<int I> 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X0 { 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X0(); 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static void* operator new(size_t) { 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return I; // expected-error{{cannot initialize}} 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao } 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static void operator delete(void*) { 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int *ip = I; // expected-error{{cannot initialize}} 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao } 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test_X0() { 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // Using the global operator new suppresses the search for a 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // operator delete in the class. 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao ::new X0<2>; 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao new X0<3>; // expected-note 2{{instantiation}} 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Operator delete template for placement new[] with global lookup 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<int I> 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X1 { 29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao X1(); 30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static void* operator new[](size_t) { 32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return I; // expected-error{{cannot initialize}} 33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao } 34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao static void operator delete[](void*) { 36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int *ip = I; // expected-error{{cannot initialize}} 37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao } 38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test_X1() { 41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // Using the global operator new suppresses the search for a 42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // operator delete in the class. 43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao ::new X1<2> [17]; 44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao new X1<3> [17]; // expected-note 2{{instantiation}} 46ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 47