diff options
-rw-r--r-- | test/SemaCXX/dcl_ambig_res.cpp | 66 | ||||
-rw-r--r-- | www/cxx_status.html | 296 |
2 files changed, 303 insertions, 59 deletions
diff --git a/test/SemaCXX/dcl_ambig_res.cpp b/test/SemaCXX/dcl_ambig_res.cpp new file mode 100644 index 0000000000..57bf4095af --- /dev/null +++ b/test/SemaCXX/dcl_ambig_res.cpp @@ -0,0 +1,66 @@ +// RUN: clang-cc -fsyntax-only -pedantic -verify %s + +// [dcl.ambig.res]p1: +struct S { + S(int); + void bar(); +}; + +int returns_an_int(); + +void foo(double a) +{ + S w(int(a)); // expected-warning{{disambiguated}} + w(17); + S x(int()); // expected-warning{{disambiguated}} + x(&returns_an_int); + S y((int)a); + y.bar(); + S z = int(a); + z.bar(); +} + +// [dcl.ambig.res]p3: +char *p; +void *operator new(__SIZE_TYPE__, int); +void foo3() { + const int x = 63; + new (int(*p)) int; //new-placement expression + new (int(*[x])); //new type-id +} + +// [dcl.ambig.res]p4: +template <class T> // expected-note{{here}} +struct S4 { + T *p; +}; +S4<int()> x; //type-id +S4<int(1)> y; // expected-error{{must be a type}} + +// [dcl.ambig.res]p5: +void foo5() +{ + (void)sizeof(int(1)); //expression + // FIXME: should we make this an error rather than a warning? + // (It affects SFINAE) + (void)sizeof(int()); // expected-warning{{function type}} +} + +// [dcl.ambig.res]p6: +void foo6() +{ + (void)(int(1)); //expression + (void)(int())1; // expected-error{{used type}} +} + +// [dcl.ambig.res]p7: +class C7 { }; +void f7(int(C7)) { } // expected-note{{candidate}} +int g7(C7); +void foo7() { + f7(1); // expected-error{{no matching function}} + f7(g7); //OK +} + +void h7(int *(C7[10])) { } // expected-note{{previous}} +void h7(int *(*_fp)(C7 _parm[10])) { } // expected-error{{redefinition}} diff --git a/www/cxx_status.html b/www/cxx_status.html index 8f857e4d8d..b165b9b1da 100644 --- a/www/cxx_status.html +++ b/www/cxx_status.html @@ -1113,25 +1113,97 @@ welcome!</p> <td></td> <td></td> </tr> -<tr><td>8 [dcl.decl]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 8.1 [dcl.name]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 8.2 [dcl.ambig.res]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 8.3 [dcl.meaning]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 8.3.1 [dcl.ptr]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 8.3.2 [dcl.ref]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 8.3.3 [dcl.mptr]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 8.3.4 [dcl.array]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 8.3.5 [dcl.fct]</td><td></td><td></td><td></td><td></td><td></td></tr> <tr> + <td>8 [dcl.decl]</td><td></td><td></td><td></td><td></td><td></td> +</tr> +<tr> + <td> 8.1 [dcl.name]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 8.2 [dcl.ambig.res]</td> + <td class="complete" align="center">✓</td> + <td class="na" align="center">N/A</td> + <td class="complete" align="center">✓</td> + <td class="na">N/A</td> + <td></td> +</tr> +<tr> + <td> 8.3 [dcl.meaning]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="advanced" align="center"></td> + <td class="na">N/A</td> + <td>Qualified declarator-ids are not fully implemented.</td> +</tr> + <tr> + <td> 8.3.1 [dcl.ptr]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> + <td> 8.3.2 [dcl.ref]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> + <td> 8.3.3 [dcl.mptr]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> + <td> 8.3.4 [dcl.array]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> + <td> 8.3.5 [dcl.fct]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na">N/A</td> + <td></td> + </tr> + <tr> <td> 8.3.6 [dcl.fct.default]</td> <td class="advanced" align="center"></td> <td class="advanced" align="center"></td> <td class="advanced" align="center"></td> - <td></td> + <td class="na">N/A</td> <td>Missing default arguments for templates.</td> </tr> -<tr><td> 8.4 [dcl.fct.def]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 8.5 [dcl.init]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 8.4 [dcl.fct.def]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td>ctor-initializers are not fully type-checked.</td> +</tr> +<tr> + <td> 8.5 [dcl.init]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td></td> +</tr> <tr> <td> 8.5.1[dcl.init.aggr]</td> <td class="advanced" align="center"></td> @@ -1167,9 +1239,9 @@ welcome!</p> <tr> <td> 9.1 [class.name]</td> <td class="complete" align="center">✓</td> - <td></td> - <td></td> - <td></td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na" align="center">N/A</td> <td></td> </tr> <tr> @@ -1177,15 +1249,15 @@ welcome!</p> <td class="advanced" align="center"></td> <td class="medium" align="center"></td> <td class="medium" align="center"></td> - <td></td> - <td>No parser support for using declarations, or templates.</td> + <td class="basic" align="center"></td> + <td>No parser support for using declarations or member templates.</td> </tr> <tr> <td> 9.3 [class.mfct]</td> <td class="complete" align="center">✓</td> - <td class="medium" align="center"></td> - <td class="medium" align="center"></td> - <td></td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="basic" align="center"></td> <td></td> </tr> <tr> @@ -1193,7 +1265,7 @@ welcome!</p> <td class="complete" align="center">✓</td> <td class="medium" align="center"></td> <td class="medium" align="center"></td> - <td></td> + <td class="basic" align="center"></td> <td></td> </tr> <tr> @@ -1201,7 +1273,7 @@ welcome!</p> <td class="complete" align="center">✓</td> <td class="medium" align="center"></td> <td class="medium" align="center"></td> - <td></td> + <td class="basic"></td> <td></td> </tr> <tr> @@ -1209,7 +1281,7 @@ welcome!</p> <td class="complete" align="center">✓</td> <td class="complete" align="center">✓</td> <td class="medium" align="center"></td> - <td></td> + <td class="basic"></td> <td></td> </tr> <tr> @@ -1217,7 +1289,7 @@ welcome!</p> <td class="complete" align="center">✓</td> <td class="complete" align="center">✓</td> <td class="medium" align="center"></td> - <td></td> + <td class="basic"></td> <td></td> </tr> <tr> @@ -1225,7 +1297,7 @@ welcome!</p> <td class="complete" align="center">✓</td> <td class="complete" align="center">✓</td> <td class="medium" align="center"></td> - <td></td> + <td class="basic"></td> <td></td> </tr> <tr> @@ -1239,89 +1311,187 @@ welcome!</p> <tr> <td> 9.6 [class.bit]</td> <td class="complete" align="center">✓</td> - <td></td> - <td></td> - <td></td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> <td></td> </tr> <tr> <td> 9.7 [class.nest]</td> <td class="complete" align="center">✓</td> - <td></td> - <td></td> - <td></td> + <td class="advanced"></td> + <td class="advanced"></td> + <td class="na" align="center">N/A</td> <td></td> </tr> <tr> <td> 9.8 [class.local]</td> <td class="complete" align="center">✓</td> - <td></td> - <td></td> - <td></td> + <td class="medium"></td> + <td class="broken"></td> + <td class="broken"></td> <td></td> </tr> <tr> <td> 9.9 [class.nested.type]</td> <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na" align="center">N/A</td> <td></td> +</tr> +<tr> + <td>10 [class.derived]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> <td></td> - <td></td> +</tr> +<tr> + <td> 10.1 [class.mi]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td>No layout of base classes</td> +</tr> +<tr> + <td> 10.2 [class.member.lookup]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="na" align="center">N/A</td> <td></td> </tr> -<tr><td>10 [class.derived]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 10.1 [class.mi]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 10.2 [class.member.lookup]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 10.3 [class.virtual]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 10.3 [class.virtual]</td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="basic" align="center"></td> + <td class="broken" align="center"></td> + <td>No semantic analysis for overriding virtual functions or inheriting a virtual function. No layout of classes with virtual functions.</td> +</tr> <tr> <td> 10.4 [class.abstract]</td> <td class="complete" align="center">✓</td> <td class="complete" align="center">✓</td> <td class="complete" align="center">✓</td> - <td class="na">N/A</td> + <td class="na" align="center">N/A</td> <td></td> </tr> -<tr><td>11 [class.access]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 11.1 [class.access.spec]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 11.2 [class.access.base]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 11.3 [class.access.dcl]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 11.4 [class.friend]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 11.5 [class.protected]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 11.6 [class.access.virt]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 11.7 [class.paths]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 11.8 [class.access.nest]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td>11 [class.access]</td> + <td class="medium" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.1 [class.access.spec]</td> + <td class="complete" align="center">✓</td> + <td class="advanced" align="center"></td> + <td class="complete" align="center">✓</td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.2 [class.access.base]</td> + <td class="complete" align="center">✓</td> + <td class="complete" align="center">✓</td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.3 [class.access.dcl]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.4 [class.friend]</td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.5 [class.protected]</td> + <td class="na" align="center"></td> + <td class="complete" align="center">✓</td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.6 [class.access.virt]</td> + <td class="na" align="center"></td> + <td class="na" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.7 [class.paths]</td> + <td class="na" align="center"></td> + <td class="na" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> +<tr> + <td> 11.8 [class.access.nest]</td> + <td class="na" align="center"></td> + <td class="na" align="center"></td> + <td class="broken" align="center"></td> + <td class="na" align="center">N/A</td> + <td></td> +</tr> <tr><td>12 [special]</td><td></td><td></td><td></td><td></td><td></td></tr> <tr> <td> 12.1 [class.ctor]</td> <td class="advanced" align="center"></td> <td class="medium" align="center"></td> <td class="basic" align="center"></td> - <td class="broken" align="center"></td> - <td></td> + <td class="basic" align="center"></td> + <td>Implicitly-declared constructors are never defined.</td> +</tr> +<tr> + <td> 12.2 [class.temporary]</td> + <td class="na" align="center">N/A</td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td class="basic" align="center"></td> + <td>Implementation of temporary objects is in its initial stages.</td> </tr> -<tr><td> 12.2 [class.temporary]</td><td></td><td></td><td></td><td></td><td></td></tr> <tr> <td> 12.3 [class.conv]</td> <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> <td class="medium" align="center"></td> - <td class="basic" align="center"></td> <td class="broken" align="center"></td> <td></td> </tr> <tr> <td> 12.3.1 [class.conv.ctor]</td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> <td class="advanced" align="center"></td> - <td class="medium" align="center"></td> - <td class="medium" align="center"></td> <td class="broken" align="center"></td> <td></td> </tr> <tr> <td> 12.3.2 [class.conv.fct]</td> + <td class="complete" align="center"></td> + <td class="advanced" align="center"></td> <td class="advanced" align="center"></td> - <td class="medium" align="center"></td> - <td class="basic" align="center"></td> <td class="broken" align="center"></td> - <td>Conversion functions can be declared and defined, but aren't used for anything.</td> + <td>No support for inheritance of conversion functions.</td> </tr> <tr> <td> 12.4 [class.dtor]</td> @@ -1343,7 +1513,15 @@ welcome!</p> <td>No actual direct initialization; implicit initialization not checked.</td> </tr> <tr><td> 12.7 [class.cdtor]</td><td></td><td></td><td></td><td></td><td></td></tr> -<tr><td> 12.8 [class.copy]</td><td></td><td></td><td></td><td></td><td></td></tr> +<tr> + <td> 12.8 [class.copy]</td> + <td class="advanced" align="center"></td> + <td class="advanced" align="center"></td> + <td class="medium" align="center"></td> + <td class="broken" align="center"></td> + <td>Copy assignment operators are mostly ignored by semantic analysis.</td> +</tr> + <tr><td>13 [over]</td><td></td><td></td><td></td><td></td><td></td></tr> <tr> <td> 13.1 [over.load]</td> |