1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -pedantic -verify %s
26d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor
3db3353f6c9f3ffd291ce9e314e996071252c4285NAKAMURA Takumi// PR13819
4db3353f6c9f3ffd291ce9e314e996071252c4285NAKAMURA Takumi// REQUIRES: LP64
5db3353f6c9f3ffd291ce9e314e996071252c4285NAKAMURA Takumi
66d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor// [dcl.ambig.res]p1:
76d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorstruct S {
86d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  S(int);
96d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  void bar();
106d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor};
116d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor
126d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorint returns_an_int();
136d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor
146d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorvoid foo(double a)
156d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor{
16b9c6261d02f688d0a9a36b736ad5956fbc737854Richard Smith  S w(int(a)); // expected-warning{{disambiguated as a function declaration}} expected-note{{add a pair of parentheses}}
176d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  w(17);
18b9c6261d02f688d0a9a36b736ad5956fbc737854Richard Smith  S x1(int()); // expected-warning{{disambiguated as a function declaration}} expected-note{{add a pair of parentheses}}
1960c93c9981c467738369702e7aa23fd58c2b6aacDouglas Gregor  x1(&returns_an_int);
206d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  S y((int)a);
216d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  y.bar();
226d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  S z = int(a);
236d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  z.bar();
246d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor}
256d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor
266d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor// [dcl.ambig.res]p3:
276d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorchar *p;
286d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorvoid *operator new(__SIZE_TYPE__, int);
296d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorvoid foo3() {
306d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  const int x = 63;
316d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  new (int(*p)) int; //new-placement expression
326d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  new (int(*[x])); //new type-id
336d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor}
346d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor
356d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor// [dcl.ambig.res]p4:
366d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregortemplate <class T>  // expected-note{{here}}
376d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorstruct S4 {
386d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  T *p;
396d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor};
406d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas GregorS4<int()> x; //type-id
416d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas GregorS4<int(1)> y; // expected-error{{must be a type}}
426d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor
436d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor// [dcl.ambig.res]p5:
446d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorvoid foo5()
456d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor{
466d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  (void)sizeof(int(1)); //expression
47c99b90edb85ea0a5be6ce567a8c0147b76534e15Eli Friedman  (void)sizeof(int()); // expected-error{{function type}}
486d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor}
496d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor
506d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor// [dcl.ambig.res]p6:
516d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorvoid foo6()
526d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor{
536d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  (void)(int(1)); //expression
549cc11e70031365972424b43f439021d88096b146Sebastian Redl  (void)(int())1; // expected-error{{to 'int ()'}}
556d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor}
566d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor
576d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor// [dcl.ambig.res]p7:
586d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorclass C7 { };
596d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorvoid f7(int(C7)) { } // expected-note{{candidate}}
606d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorint g7(C7);
616d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorvoid foo7() {
626d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  f7(1); // expected-error{{no matching function}}
636d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor  f7(g7); //OK
646d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor}
656d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregor
666d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorvoid h7(int *(C7[10])) { } // expected-note{{previous}}
676d507a6d96ea6379bc1df207abe26ad4cbe6563dDouglas Gregorvoid h7(int *(*_fp)(C7 _parm[10])) { } // expected-error{{redefinition}}
681e054213f8416a48866105216ad4a45f1e7c24deArgyrios Kyrtzidis
691e054213f8416a48866105216ad4a45f1e7c24deArgyrios Kyrtzidisstruct S5 {
701e054213f8416a48866105216ad4a45f1e7c24deArgyrios Kyrtzidis  static bool const value = false;
711e054213f8416a48866105216ad4a45f1e7c24deArgyrios Kyrtzidis};
721e054213f8416a48866105216ad4a45f1e7c24deArgyrios Kyrtzidisint foo8() {
73b9c6261d02f688d0a9a36b736ad5956fbc737854Richard Smith  int v(int(S5::value)); // expected-warning{{disambiguated as a function declaration}} expected-note{{add a pair of parentheses}} expected-error{{parameter declarator cannot be qualified}}
741e054213f8416a48866105216ad4a45f1e7c24deArgyrios Kyrtzidis}
75346af03b21db01264852afb8a86719c9284855feArgyrios Kyrtzidis
76346af03b21db01264852afb8a86719c9284855feArgyrios Kyrtzidistemplate<typename T>
77346af03b21db01264852afb8a86719c9284855feArgyrios Kyrtzidisvoid rdar8739801( void (T::*)( void ) __attribute__((unused)) );
78