r209319 - Sema: Implement DR244

Alp Toker alp at nuanti.com
Wed May 21 16:38:08 PDT 2014


On 21/05/2014 23:19, David Majnemer wrote:
> Author: majnemer
> Date: Wed May 21 15:19:59 2014
> New Revision: 209319
>
> URL: http://llvm.org/viewvc/llvm-project?rev=209319&view=rev
> Log:
> Sema: Implement DR244
>
> Summary:
> Naming the destructor using a typedef-name for the class-name is
> well-formed.
>
> This fixes PR19620.
>
> Reviewers: rsmith, doug.gregor

Did Doug participate in review for this patch?

Looking through SVN history, I'm seeing an alarming number of confusing 
review trails.

If review happened off-list that's fine, but it needs to be stated 
clearly because the system works on trust.

(In fact, I'm seeing relatively inactive developer names showing up 
suspiciously in these "Reviewers" lines while some of the most active 
reviewers barely appear at all. Could this be a problem with Phabricator 
or some internal system you guys are using?)

Alp.


>
> Subscribers: cfe-commits
>
> Differential Revision: http://reviews.llvm.org/D3583
>
> Modified:
>      cfe/trunk/lib/Sema/SemaExprCXX.cpp
>      cfe/trunk/test/CXX/basic/basic.lookup/basic.lookup.qual/p6.cpp
>      cfe/trunk/test/CXX/drs/dr2xx.cpp
>      cfe/trunk/www/cxx_dr_status.html
>
> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=209319&r1=209318&r2=209319&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Wed May 21 15:19:59 2014
> @@ -121,31 +121,26 @@ ParsedType Sema::getDestructorName(Sourc
>   
>       bool AlreadySearched = false;
>       bool LookAtPrefix = true;
> -    // C++ [basic.lookup.qual]p6:
> +    // C++11 [basic.lookup.qual]p6:
>       //   If a pseudo-destructor-name (5.2.4) contains a nested-name-specifier,
>       //   the type-names are looked up as types in the scope designated by the
> -    //   nested-name-specifier. In a qualified-id of the form:
> +    //   nested-name-specifier. Similarly, in a qualified-id of the form:
>       //
> -    //     ::[opt] nested-name-specifier  ~ class-name
> +    //     nested-name-specifier[opt] class-name :: ~ class-name
>       //
> -    //   where the nested-name-specifier designates a namespace scope, and in
> -    //   a qualified-id of the form:
> +    //   the second class-name is looked up in the same scope as the first.
>       //
> -    //     ::opt nested-name-specifier class-name ::  ~ class-name
> -    //
> -    //   the class-names are looked up as types in the scope designated by
> -    //   the nested-name-specifier.
> -    //
> -    // Here, we check the first case (completely) and determine whether the
> -    // code below is permitted to look at the prefix of the
> -    // nested-name-specifier.
> +    // Here, we determine whether the code below is permitted to look at the
> +    // prefix of the nested-name-specifier.
>       DeclContext *DC = computeDeclContext(SS, EnteringContext);
>       if (DC && DC->isFileContext()) {
>         AlreadySearched = true;
>         LookupCtx = DC;
>         isDependent = false;
> -    } else if (DC && isa<CXXRecordDecl>(DC))
> +    } else if (DC && isa<CXXRecordDecl>(DC)) {
>         LookAtPrefix = false;
> +      LookInScope = true;
> +    }
>   
>       // The second case from the C++03 rules quoted further above.
>       NestedNameSpecifier *Prefix = 0;
> @@ -163,8 +158,6 @@ ParsedType Sema::getDestructorName(Sourc
>         LookupCtx = computeDeclContext(SS, EnteringContext);
>         isDependent = LookupCtx && LookupCtx->isDependentContext();
>       }
> -
> -    LookInScope = false;
>     } else if (ObjectTypePtr) {
>       // C++ [basic.lookup.classref]p3:
>       //   If the unqualified-id is ~type-name, the type-name is looked up
>
> Modified: cfe/trunk/test/CXX/basic/basic.lookup/basic.lookup.qual/p6.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/basic/basic.lookup/basic.lookup.qual/p6.cpp?rev=209319&r1=209318&r2=209319&view=diff
> ==============================================================================
> --- cfe/trunk/test/CXX/basic/basic.lookup/basic.lookup.qual/p6.cpp (original)
> +++ cfe/trunk/test/CXX/basic/basic.lookup/basic.lookup.qual/p6.cpp Wed May 21 15:19:59 2014
> @@ -1,4 +1,5 @@
>   // RUN: %clang_cc1 -fsyntax-only -verify %s
> +// expected-no-diagnostics
>   
>   struct C {
>     typedef int I;
> @@ -20,5 +21,5 @@ struct A {
>   typedef A AB;
>   int main() {
>     AB *p;
> -  p->AB::~AB(); // expected-error{{expected the class name after '~' to name a destructor}}
> +  p->AB::~AB();
>   }
>
> Modified: cfe/trunk/test/CXX/drs/dr2xx.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/drs/dr2xx.cpp?rev=209319&r1=209318&r2=209319&view=diff
> ==============================================================================
> --- cfe/trunk/test/CXX/drs/dr2xx.cpp (original)
> +++ cfe/trunk/test/CXX/drs/dr2xx.cpp Wed May 21 15:19:59 2014
> @@ -466,7 +466,7 @@ namespace dr243 { // dr243: yes
>     A a2 = b; // expected-error {{ambiguous}}
>   }
>   
> -namespace dr244 { // dr244: no
> +namespace dr244 { // dr244: 3.5
>     struct B {}; struct D : B {}; // expected-note {{here}}
>   
>     D D_object;
> @@ -480,7 +480,7 @@ namespace dr244 { // dr244: no
>       B_ptr->~B_alias();
>       B_ptr->B_alias::~B();
>       // This is valid under DR244.
> -    B_ptr->B_alias::~B_alias(); // FIXME: expected-error {{expected the class name after '~' to name a destructor}}
> +    B_ptr->B_alias::~B_alias();
>       B_ptr->dr244::~B(); // expected-error {{refers to a member in namespace}}
>       B_ptr->dr244::~B_alias(); // expected-error {{refers to a member in namespace}}
>     }
> @@ -1013,11 +1013,16 @@ namespace dr298 { // dr298: yes
>   
>     B::B() {} // expected-error {{requires a type specifier}}
>     B::A() {} // ok
> -  C::~C() {} // expected-error {{expected the class name}}
> -  C::~A() {} // ok
> +  C::~C() {} // expected-error {{destructor cannot be declared using a typedef 'C' (aka 'const dr298::A') of the class name}}
>   
>     typedef struct D E; // expected-note {{here}}
>     struct E {}; // expected-error {{conflicts with typedef}}
> +
> +  struct F {
> +    ~F();
> +  };
> +  typedef const F G;
> +  G::~F() {} // ok
>   }
>   
>   namespace dr299 { // dr299: yes c++11
>
> Modified: cfe/trunk/www/cxx_dr_status.html
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_dr_status.html?rev=209319&r1=209318&r2=209319&view=diff
> ==============================================================================
> --- cfe/trunk/www/cxx_dr_status.html (original)
> +++ cfe/trunk/www/cxx_dr_status.html Wed May 21 15:19:59 2014
> @@ -1504,7 +1504,7 @@ accessible?</td>
>       <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#244">244</a></td>
>       <td>CD1</td>
>       <td>Destructor lookup</td>
> -    <td class="none" align="center">No</td>
> +    <td class="svn" align="center">SVN</td>
>     </tr>
>     <tr id="245">
>       <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#245">245</a></td>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-- 
http://www.nuanti.com
the browser experts




More information about the cfe-commits mailing list