[PATCH] D35056: GCC ABI incompatibility when passing object with trivial copy ctor, trivial dtor, and non-trivial move ctor

Vassil Vassilev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Aug 6 12:20:05 PDT 2017


v.g.vassilev updated this revision to Diff 109932.
v.g.vassilev marked an inline comment as done.
v.g.vassilev added a comment.

We set the record's property denoting whether we can pass the decl by registers as a last step of `Sema::CheckCompletedCXXClass`. We cannot do it any earlier than that because we have not computed the triviality information.

This patch still eagerly defines too many implicit members. As discussed with @rsmith, he will take care of the non-trivial refactoring of `Sema::ShouldDeleteSpecialMember` to fix this regression.

This patch passes all tests in codegen but still fails a few which are sensitive to the amount of implicit members being created:

  Failing Tests (13):
      Clang :: CodeCompletion/ordinary-name-cxx11.cpp
      Clang :: Misc/ast-dump-color.cpp
      Clang :: Misc/ast-dump-decl.cpp
      Clang :: Misc/ast-dump-invalid.cpp
      Clang-Unit :: AST/./ASTTests/CXXMethodDecl.CXXMethodDeclWithNoExceptSpecification
      Clang-Unit :: ASTMatchers/./ASTMatchersTests/ConstructorDeclaration.IsImplicit
      Clang-Unit :: ASTMatchers/./ASTMatchersTests/ConstructorDeclaration.Kinds
      Clang-Unit :: ASTMatchers/./ASTMatchersTests/DeclarationMatcher.MatchNot
      Clang-Unit :: ASTMatchers/./ASTMatchersTests/DeclarationMatcher.hasMethod
      Clang-Unit :: ASTMatchers/./ASTMatchersTests/DeclaratorDecl.MatchesDeclaratorDecls
      Clang-Unit :: ASTMatchers/./ASTMatchersTests/Matcher.References
      Clang-Unit :: ASTMatchers/./ASTMatchersTests/TypeMatcher.MatchesClassType
      Clang-Unit :: ASTMatchers/Dynamic/./DynamicASTMatchersTests/RegistryTest.VariadicOp
  
    Expected Passes    : 10786
    Expected Failures  : 17
    Unsupported Tests  : 195
    Unexpected Failures: 13


https://reviews.llvm.org/D35056

Files:
  include/clang/AST/DeclCXX.h
  include/clang/Sema/Sema.h
  lib/AST/ASTImporter.cpp
  lib/AST/DeclCXX.cpp
  lib/CodeGen/CGCXXABI.cpp
  lib/CodeGen/ItaniumCXXABI.cpp
  lib/Sema/SemaDeclCXX.cpp
  lib/Serialization/ASTReaderDecl.cpp
  lib/Serialization/ASTWriter.cpp
  test/CodeGenCXX/uncopyable-args.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D35056.109932.patch
Type: text/x-patch
Size: 15380 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170806/c59b8d1b/attachment.bin>


More information about the cfe-commits mailing list