1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -pedantic -verify %s 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid f() { 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao typedef int T; 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao int x, *px; 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // Type id. 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (T())x; // expected-error {{cast from 'int' to 'T ()'}} 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (T())+x; // expected-error {{cast from 'int' to 'T ()'}} 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (T())*px; // expected-error {{cast from 'int' to 'T ()'}} 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // Expression. 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao x = (T()); 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao x = (T())/x; 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao typedef int *PT; 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // Make sure stuff inside the parens are parsed only once (only one warning). 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao x = (PT()[(int){1}]); // expected-warning {{compound literals}} 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // Special case: empty parens is a call, not an expression 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao struct S{int operator()();}; 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (S())(); 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // FIXME: Special case: "++" is postfix here, not prefix 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao // (S())++; 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Make sure we do tentative parsing correctly in conditions. 29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotypedef int type; 30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct rec { rec(int); }; 31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace ns { 33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao typedef int type; 34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao struct rec { rec(int); }; 35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct cls { 38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao typedef int type; 39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao struct rec { rec(int); }; 40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct result { 43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao template <class T> result(T); 44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao bool check(); 45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}; 46ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 47ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test(int i) { 48ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if (result((cls::type) i).check()) 49ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return; 50ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 51ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if (result((ns::type) i).check()) 52ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return; 53ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 54ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if (result((::type) i).check()) 55ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return; 56ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 57ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if (result((cls::rec) i).check()) 58ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return; 59ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 60ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if (result((ns::rec) i).check()) 61ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return; 62ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 63ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if (result((::rec) i).check()) 64ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return; 65ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 66ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 67