1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Test template instantiation for C99-specific features. 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// --------------------------------------------------------------------- 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Designated initializers 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// --------------------------------------------------------------------- 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename XType, typename YType> 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct DesigInit0 { 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void f(XType x, YType y) { 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao T agg = { 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao .y = y, // expected-error{{does not refer}} 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao .x = x // expected-error{{does not refer}} 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao }; 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao } 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct Point2D { 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao float x, y; 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate struct DesigInit0<Point2D, int, double>; 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct Point3D { 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao float x, y, z; 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate struct DesigInit0<Point3D, int, double>; 29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct Color { 31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao unsigned char red, green, blue; 32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct ColorPoint3D { 35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao Color color; 36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao float x, y, z; 37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate struct DesigInit0<ColorPoint3D, int, double>; 40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate struct DesigInit0<Color, int, double>; // expected-note{{instantiation}} 41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, int Subscript1, int Subscript2, 43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao typename Val1, typename Val2> 44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct DesigArrayInit0 { 45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void f(Val1 val1, Val2 val2) { 46ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao T array = { 47ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao [Subscript1] = val1, 48ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao [Subscript2] = val2 // expected-error{{exceeds array bounds}} 49ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao }; 50ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 51ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int array2[10] = { [5] = 3 }; 52ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao } 53ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 54ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 55ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate struct DesigArrayInit0<int[8], 5, 3, float, int>; 56ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate struct DesigArrayInit0<int[8], 5, 13, float, int>; // expected-note{{instantiation}} 57ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 58ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, int Subscript1, int Subscript2, 59ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao typename Val1> 60ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct DesigArrayRangeInit0 { 61ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao void f(Val1 val1) { 62ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao T array = { 63ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao [Subscript1...Subscript2] = val1 // expected-error{{exceeds}} 64ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao }; 65ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao } 66ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 67ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 68ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate struct DesigArrayRangeInit0<int[8], 3, 5, float>; 69ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate struct DesigArrayRangeInit0<int[8], 5, 13, float>; // expected-note{{instantiation}} 70ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 71ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// --------------------------------------------------------------------- 72ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Compound literals 73ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// --------------------------------------------------------------------- 74ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename Arg1, typename Arg2> 75ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct CompoundLiteral0 { 76ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao T f(Arg1 a1, Arg2 a2) { 77ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return (T){a1, a2}; 78ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao } 79ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 80ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 81ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate struct CompoundLiteral0<Point2D, int, float>; 82