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