From 6d507a6d96ea6379bc1df207abe26ad4cbe6563d Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Thu, 7 May 2009 17:50:16 +0000 Subject: [PATCH] Big update to the C++ status table to reflect "recent" development. Still much more to write! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71167 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/SemaCXX/dcl_ambig_res.cpp | 66 ++++++++ www/cxx_status.html | 296 ++++++++++++++++++++++++++------- 2 files changed, 303 insertions(+), 59 deletions(-) create mode 100644 test/SemaCXX/dcl_ambig_res.cpp 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 // expected-note{{here}} +struct S4 { + T *p; +}; +S4 x; //type-id +S4 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!

-8 [dcl.decl] -  8.1 [dcl.name] -  8.2 [dcl.ambig.res] -  8.3 [dcl.meaning] -    8.3.1 [dcl.ptr] -    8.3.2 [dcl.ref] -    8.3.3 [dcl.mptr] -    8.3.4 [dcl.array] -    8.3.5 [dcl.fct] + 8 [dcl.decl] + + +   8.1 [dcl.name] + ✓ + ✓ + ✓ + N/A + + + +   8.2 [dcl.ambig.res] + ✓ + N/A + ✓ + N/A + + + +   8.3 [dcl.meaning] + ✓ + ✓ + + N/A + Qualified declarator-ids are not fully implemented. + + +     8.3.1 [dcl.ptr] + ✓ + ✓ + ✓ + N/A + + + +     8.3.2 [dcl.ref] + ✓ + ✓ + ✓ + N/A + + + +     8.3.3 [dcl.mptr] + ✓ + ✓ + ✓ + N/A + + + +     8.3.4 [dcl.array] + ✓ + ✓ + ✓ + N/A + + + +     8.3.5 [dcl.fct] + ✓ + ✓ + ✓ + N/A + + +     8.3.6 [dcl.fct.default] - + N/A Missing default arguments for templates. -  8.4 [dcl.fct.def] -  8.5 [dcl.init] + +   8.4 [dcl.fct.def] + ✓ + ✓ + + + ctor-initializers are not fully type-checked. + + +   8.5 [dcl.init] + + + + + +     8.5.1[dcl.init.aggr] @@ -1167,9 +1239,9 @@ welcome!

  9.1 [class.name] ✓ - - - + ✓ + ✓ + N/A @@ -1177,15 +1249,15 @@ welcome!

- - No parser support for using declarations, or templates. + + No parser support for using declarations or member templates.   9.3 [class.mfct] ✓ - - - + + + @@ -1193,7 +1265,7 @@ welcome!

✓ - + @@ -1201,7 +1273,7 @@ welcome!

✓ - + @@ -1209,7 +1281,7 @@ welcome!

✓ ✓ - + @@ -1217,7 +1289,7 @@ welcome!

✓ ✓ - + @@ -1225,7 +1297,7 @@ welcome!

✓ ✓ - + @@ -1239,89 +1311,187 @@ welcome!

  9.6 [class.bit] ✓ - - - + ✓ + ✓ + ✓   9.7 [class.nest] ✓ - - - + + + N/A   9.8 [class.local] ✓ - - - + + +   9.9 [class.nested.type] ✓ + ✓ + ✓ + N/A + + + 10 [class.derived] + + + + - + + +   10.1 [class.mi] + + + + + No layout of base classes + + +   10.2 [class.member.lookup] + ✓ + ✓ + ✓ + N/A -10 [class.derived] -  10.1 [class.mi] -  10.2 [class.member.lookup] -  10.3 [class.virtual] + +   10.3 [class.virtual] + + + + + No semantic analysis for overriding virtual functions or inheriting a virtual function. No layout of classes with virtual functions. +   10.4 [class.abstract] ✓ ✓ ✓ - N/A + N/A -11 [class.access] -  11.1 [class.access.spec] -  11.2 [class.access.base] -  11.3 [class.access.dcl] -  11.4 [class.friend] -  11.5 [class.protected] -  11.6 [class.access.virt] -  11.7 [class.paths] -  11.8 [class.access.nest] + + 11 [class.access] + + + + N/A + + + +   11.1 [class.access.spec] + ✓ + + ✓ + N/A + + + +   11.2 [class.access.base] + ✓ + ✓ + + N/A + + + +   11.3 [class.access.dcl] + + + + N/A + + + +   11.4 [class.friend] + + + + N/A + + + +   11.5 [class.protected] + + ✓ + + N/A + + + +   11.6 [class.access.virt] + + + + N/A + + + +   11.7 [class.paths] + + + + N/A + + + +   11.8 [class.access.nest] + + + + N/A + + 12 [special]   12.1 [class.ctor] - - + + Implicitly-declared constructors are never defined. + + +   12.2 [class.temporary] + N/A + + + + Implementation of temporary objects is in its initial stages. -  12.2 [class.temporary]   12.3 [class.conv] + -     12.3.1 [class.conv.ctor] + + - -     12.3.2 [class.conv.fct] + + - - - Conversion functions can be declared and defined, but aren't used for anything. + No support for inheritance of conversion functions.   12.4 [class.dtor] @@ -1343,7 +1513,15 @@ welcome!

No actual direct initialization; implicit initialization not checked.   12.7 [class.cdtor] -  12.8 [class.copy] + +   12.8 [class.copy] + + + + + Copy assignment operators are mostly ignored by semantic analysis. + + 13 [over]   13.1 [over.load] -- 2.40.0