1bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl// RUN: %clang_cc1 -fsyntax-only -pedantic -verify %s 2adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 3adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellvoid f() { 4adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell typedef int T; 5adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell int x, *px; 6adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 7adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell // Type id. 8adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (T())x; // expected-error {{cast from 'int' to 'T ()'}} 9adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (T())+x; // expected-error {{cast from 'int' to 'T ()'}} 10adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (T())*px; // expected-error {{cast from 'int' to 'T ()'}} 11adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 12adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell // Expression. 13adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell x = (T()); 14adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell x = (T())/x; 15adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 16adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell typedef int *PT; 17adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell // Make sure stuff inside the parens are parsed only once (only one warning). 18adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell x = (PT()[(int){1}]); // expected-warning {{compound literals}} 19adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 20adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell // Special case: empty parens is a call, not an expression 21adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell struct S{int operator()();}; 22adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell (S())(); 23adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 24adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell // FIXME: Special case: "++" is postfix here, not prefix 25adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell // (S())++; 26adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 27adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 28adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell// Make sure we do tentative parsing correctly in conditions. 29adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef int type; 30adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct rec { rec(int); }; 31adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 32adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellnamespace ns { 33adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell typedef int type; 34adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell struct rec { rec(int); }; 35adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell} 36adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 37adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct cls { 38e946688edac5cdf153652defae3ef732a3487416Ian Romanick typedef int type; 39ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl struct rec { rec(int); }; 40ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl}; 41adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 42adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct result { 43ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul template <class T> result(T); 44ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul bool check(); 45ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul}; 46adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 4798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheideggervoid test(int i) { 48adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell if (result((cls::type) i).check()) 49bf35d70635309e499aee666eb5811446aa8b489eRoland Scheidegger return; 50bf35d70635309e499aee666eb5811446aa8b489eRoland Scheidegger 51bf35d70635309e499aee666eb5811446aa8b489eRoland Scheidegger if (result((ns::type) i).check()) 52bf35d70635309e499aee666eb5811446aa8b489eRoland Scheidegger return; 534637235183b80963536f2364e4d50fcb894886ddDave Airlie 548cb16e6daff40bbfd7b63a43da72862226a4a164Dave Airlie if (result((::type) i).check()) 558cb16e6daff40bbfd7b63a43da72862226a4a164Dave Airlie return; 56adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 57adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell if (result((cls::rec) i).check()) 58adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell return; 59adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 604637235183b80963536f2364e4d50fcb894886ddDave Airlie if (result((ns::rec) i).check()) 61adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell return; 6298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger 63122629f27925a9dc50029bebc5079f87f416a7e1Brian Paul if (result((::rec) i).check()) 6498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger return; 65fc606f7db9072d4f40081aea8f92f1d4489a5115Roland Scheidegger} 66fc606f7db9072d4f40081aea8f92f1d4489a5115Roland Scheidegger 67fc606f7db9072d4f40081aea8f92f1d4489a5115Roland Scheidegger