Skip to content
  1. May 04, 2010
  2. May 03, 2010
  3. May 02, 2010
  4. May 01, 2010
    • Douglas Gregor's avatar
      Complete reimplementation of the synthesis for implicitly-defined copy · b139cd58
      Douglas Gregor authored
      assignment operators. 
      
      Previously, Sema provided type-checking and template instantiation for
      copy assignment operators, then CodeGen would synthesize the actual
      body of the copy constructor. Unfortunately, the two were not in sync,
      and CodeGen might pick a copy-assignment operator that is different
      from what Sema chose, leading to strange failures, e.g., link-time
      failures when CodeGen called a copy-assignment operator that was not
      instantiation, run-time failures when copy-assignment operators were
      overloaded for const/non-const references and the wrong one was
      picked, and run-time failures when by-value copy-assignment operators
      did not have their arguments properly copy-initialized.
      
      This implementation synthesizes the implicitly-defined copy assignment
      operator bodies in Sema, so that the resulting ASTs encode exactly
      what CodeGen needs to do; there is no longer any special code in
      CodeGen to synthesize copy-assignment operators. The synthesis of the
      body is relatively simple, and we generate one of three different
      kinds of copy statements for each base or member:
      
        - For a class subobject, call the appropriate copy-assignment
          operator, after overload resolution has determined what that is.
        - For an array of scalar types or an array of class types that have
          trivial copy assignment operators, construct a call to
          __builtin_memcpy.
        - For an array of class types with non-trivial copy assignment
          operators, synthesize a (possibly nested!) for loop whose inner
          statement calls the copy constructor.
        - For a scalar type, use built-in assignment.
      
      This patch fixes at least a few tests cases in Boost.Spirit that were
      failing because CodeGen picked the wrong copy-assignment operator
      (leading to link-time failures), and I suspect a number of undiagnosed
      problems will also go away with this change.
      
      Some of the diagnostics we had previously have gotten worse with this
      change, since we're going through generic code for our
      type-checking. I will improve this in a subsequent patch.
      
      llvm-svn: 102853
      b139cd58
    • Anders Carlsson's avatar
      Simplify EmitCopyCtorCall. · b136e626
      Anders Carlsson authored
      llvm-svn: 102849
      b136e626
    • Anders Carlsson's avatar
      Simplify EmitClassAggrMemberwiseCopy. · aab3b573
      Anders Carlsson authored
      llvm-svn: 102848
      aab3b573
    • Anders Carlsson's avatar
      Clean up EmitClassMemberwiseCopy further. · ab826ad1
      Anders Carlsson authored
      llvm-svn: 102846
      ab826ad1
    • Anders Carlsson's avatar
      Get rid of a parameter from EmitClassMemberwiseCopy. · 820022c5
      Anders Carlsson authored
      llvm-svn: 102845
      820022c5
    • Anders Carlsson's avatar
  5. Apr 30, 2010
  6. Apr 25, 2010
  7. Apr 24, 2010
  8. Apr 21, 2010
  9. Apr 20, 2010
Loading