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