[PATCH] D20118: Add support for injected class names and constructor initializers in C++

Sean Callanan via cfe-commits cfe-commits at lists.llvm.org
Fri May 13 13:40:42 PDT 2016


Thank you for your comments, I’m working on them now.

Sean

> On May 11, 2016, at 4:39 AM, Aleksei Sidorin <a.sidorin at samsung.com> wrote:
> 
> a.sidorin added a comment.
> 
> I' d like to have some tests for this. CXXCtorInitializers can be tested with D14224 <http://reviews.llvm.org/D14224>-like stuff or with ASTMatchers (ASTImporterTest.cpp).
> Some code samples may be found in CXX/Sema tests, you just need to port/simplify them.
> 
> 
> ================
> Comment at: lib/AST/ASTImporter.cpp:3034
> @@ +3033,3 @@
> +    SmallVector<CXXCtorInitializer *, 4> CtorInitializers;
> +    for (const CXXCtorInitializer *I : FromConstructor->inits()) {
> +      CXXCtorInitializer *ToI =cast_or_null<CXXCtorInitializer>(
> ----------------
> In my latest patch, I have introduced a function named `ImportContainerChecked()`. I think it could make this code a bit more clean. What do you think?
> 
> ================
> Comment at: lib/AST/ASTImporter.cpp:3035
> @@ +3034,3 @@
> +    for (const CXXCtorInitializer *I : FromConstructor->inits()) {
> +      CXXCtorInitializer *ToI =cast_or_null<CXXCtorInitializer>(
> +          Importer.Import(I));
> ----------------
> Space after '='
> 
> ================
> Comment at: lib/AST/ASTImporter.cpp:3041
> @@ +3040,3 @@
> +    }
> +    if (unsigned NumInitializers = CtorInitializers.size()) {
> +      CXXCtorInitializer **Memory = new (Importer.getToContext())
> ----------------
> If we move this condition (I suggest to use `FromConstructor->getNumCtorIintializers()` instead) upper to cover the importing loop, we may skip this loop as well.
> 
> ================
> Comment at: lib/AST/ASTImporter.cpp:3045
> @@ +3044,3 @@
> +      std::copy(CtorInitializers.begin(), CtorInitializers.end(), Memory);
> +      llvm::cast<CXXConstructorDecl>(ToFunction)->setCtorInitializers(Memory);
> +      llvm::cast<CXXConstructorDecl>(ToFunction)->setNumCtorInitializers(
> ----------------
> As I can see, LLVM code style avoids qualified `cast`s.
> 
> ================
> Comment at: lib/AST/ASTImporter.cpp:6384
> @@ +6383,3 @@
> +      return nullptr;
> +    
> +    return new (ToContext)
> ----------------
> Trailing whitespace.
> 
> ================
> Comment at: lib/AST/ASTImporter.cpp:6389
> @@ +6388,3 @@
> +                         Import(From->getRParenLoc()),
> +                         From->isPackExpansion() ?
> +                         Import(From->getEllipsisLoc()) : SourceLocation());
> ----------------
> The indentation for `?:` here is a bit confusing.
> 
> ================
> Comment at: lib/AST/ASTImporter.cpp:6396
> @@ +6395,3 @@
> +      return nullptr;
> +    
> +    return new (ToContext)
> ----------------
> Training whitespace. It's pretty difficult to find them with Phabricator, could you check your patch for them?
> 
> ================
> Comment at: lib/AST/ASTImporter.cpp:6423
> @@ +6422,3 @@
> +  } else {
> +    return nullptr;
> +  }
> ----------------
> It seems like a case with indexed initializer is missed here. You can find my implementation on https://github.com/haoNoQ/clang/blob/summary-ipa-draft/lib/AST/ASTImporter.cpp#L2456-L2464.
> A sample that requires it is `auto parens4 = [p4(1)] {};` (test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p4.cpp)
> 
> 
> 
> Repository:
>  rL LLVM
> 
> http://reviews.llvm.org/D20118
> 
> 
> 



More information about the cfe-commits mailing list