Skip to content
  1. Feb 20, 2012
  2. Feb 19, 2012
  3. Feb 18, 2012
  4. Feb 17, 2012
    • Richard Smith's avatar
      Don't emit optimization-specific intrinsic at -O0. · 132bea96
      Richard Smith authored
      llvm-svn: 150838
      132bea96
    • Sebastian Redl's avatar
      Basic code generation support for std::initializer_list. · c83ed824
      Sebastian Redl authored
      We now generate temporary arrays to back std::initializer_list objects
      initialized with braces. The initializer_list is then made to point at
      the array. We support both ptr+size and start+end forms, although
      the latter is untested.
      
      Array lifetime is correct for temporary std::initializer_lists (e.g.
      call arguments) and local variables. It is untested for new expressions
      and member initializers.
      
      Things left to do:
      Massively increase the amount of testing. I need to write tests for
      start+end init lists, temporary objects created as a side effect of
      initializing init list objects, new expressions, member initialization,
      creation of temporary objects (e.g. std::vector) for initializer lists,
      and probably more.
      Get lifetime "right" for member initializers and new expressions. Not
      that either are very useful.
      Implement list-initialization of array new expressions.
      
      llvm-svn: 150803
      c83ed824
    • Richard Smith's avatar
      The clang half of r150794: after the construction of a global or static const · 08a51446
      Richard Smith authored
      variable ends, if the variable has a trivial destructor and no mutable
      subobjects then emit an llvm.invariant.start call for it. globalopt knows to
      make the variable const when evaluating this.
      
      llvm-svn: 150798
      08a51446
    • Richard Smith's avatar
      Bug fix: do not emit static const local variables with mutable members · e070fd2a
      Richard Smith authored
      as constants.
      
      Refactor and simplify all the separate checks for whether a type can be
      emitted as a constant.
      
      llvm-svn: 150793
      e070fd2a
    • Richard Smith's avatar
      When performing IRGen on a global, emit it as a constant if: · ae819500
      Richard Smith authored
       1) It has a const-qualified type, and
       2) It has no mutable members, and
       3) It has no dynamic initialization, and
       4) It has trivial destruction.
      Remove the unnecessary requirement that the type be POD. This allows us to
      mark all constexpr objects with no mutable members as 'constant'.
      
      llvm-svn: 150792
      ae819500
    • Richard Smith's avatar
      Make sure all remaining parts of the constant evaluator are aware that an array · 14a94138
      Richard Smith authored
      can be represented by an LValue, and use that to simplify the code a little.
      
      llvm-svn: 150789
      14a94138
    • Douglas Gregor's avatar
      Rework the Sema/AST/IRgen dance for the lambda closure type's · 355efbb2
      Douglas Gregor authored
      conversion to function pointer. Rather than having IRgen synthesize
      the body of this function, we instead introduce a static member
      function "__invoke" with the same signature as the lambda's
      operator() in the AST. Sema then generates a body for the conversion
      to function pointer which simply returns the address of __invoke. This
      approach makes it easier to evaluate a call to the conversion function
      as a constant, makes the linkage of the __invoke function follow the
      normal rules for member functions, and may make life easier down the
      road if we ever want to constexpr'ify some of lambdas.
      
      Note that IR generation is responsible for filling in the body of
      __invoke (Sema just adds a dummy body), because the body can't
      generally be expressed in C++.
      
      Eli, please review!
      
      llvm-svn: 150783
      355efbb2
    • Richard Smith's avatar
      PR12012: Fix a regression in r150419 where we would try (and fail) to · 5d108606
      Richard Smith authored
      zero-initialize class types with virtual bases when constant-evaluating an
      initializer.
      
      llvm-svn: 150770
      5d108606
  5. Feb 16, 2012
    • Eric Christopher's avatar
      Reapply r150631: · 4c006e55
      Eric Christopher authored
          "Add a completed/incomplete type difference. This allows us to have
          partial types for contexts and forward decls while allowing us to
          complete types later on for debug purposes.
      
          This piggy-backs on the metadata replacement and rauw changes
          for temporary nodes and takes advantage of the incremental
          support I added in earlier. This allows us to, if we decide,
          to limit adding methods and variables to structures in order
          to limit the amount of debug information output into a .o file.
      
          The caching is a bit complicated though so any thoughts on
          untangling that are welcome."
      
      with a fix:
      
       - Remove all RAUW during type construction by adding stub versions
         of types that we later complete.
      
      and some TODOs:
      
       - Add an RAUW cache for forward declared types so that we can replace
         them at the end of compilation.
       - Remove the code that updates on completed types because we no
         longer need to have that happen. We emit incomplete types on
         purpose and only want to know when we want to complete them.
      
      llvm-svn: 150752
      4c006e55
    • Eli Friedman's avatar
      Elide copy construction in new expressions. PR11757. · b971d497
      Eli Friedman authored
      llvm-svn: 150738
      b971d497
    • Richard Smith's avatar
      C++11 allows unions to have static data members. Remove the corresponding · 42973755
      Richard Smith authored
      restriction and add some tests.
      
      llvm-svn: 150721
      42973755
    • Eric Christopher's avatar
      Revert "Add a completed/incomplete type difference. This allows us to have" · 9a89705d
      Eric Christopher authored
      This reverts commit 9a68d4584afcd0853b930bd80235b58736e785b4.
      
      llvm-svn: 150637
      9a89705d
    • Eric Christopher's avatar
      Add a completed/incomplete type difference. This allows us to have · 7381907e
      Eric Christopher authored
      partial types for contexts and forward decls while allowing us to
      complete types later on for debug purposes.
      
      This piggy-backs on the metadata replacement and rauw changes
      for temporary nodes and takes advantage of the incremental
      support I added in earlier. This allows us to, if we decide,
      to limit adding methods and variables to structures in order
      to limit the amount of debug information output into a .o file.
      
      The caching is a bit complicated though so any thoughts on
      untangling that are welcome.
      
      llvm-svn: 150631
      7381907e
  6. Feb 15, 2012
    • John McCall's avatar
      Split reinterpret_casts of member pointers out from CK_BitCast; this · c62bb391
      John McCall authored
      is general goodness because representations of member pointers are
      not always equivalent across member pointer types on all ABIs
      (even though this isn't really standard-endorsed).
      
      Take advantage of the new information to teach IR-generation how
      to do these reinterprets in constant initializers.  Make sure this
      works when intermingled with hierarchy conversions (although
      this is not part of our motivating use case).  Doing this in the
      constant-evaluator would probably have been better, but that would
      require a *lot* of extra structure in the representation of
      constant member pointers:  you'd really have to track an arbitrary
      chain of hierarchy conversions and reinterpretations in order to
      get this right.  Ultimately, this seems less complex.  I also
      wasn't quite sure how to extend the constant evaluator to handle
      foldings that we don't actually want to treat as extended
      constant expressions.
      
      llvm-svn: 150551
      c62bb391
  7. Feb 14, 2012
  8. Feb 13, 2012
  9. Feb 09, 2012
  10. Feb 08, 2012
  11. Feb 06, 2012
  12. Feb 04, 2012
  13. Feb 03, 2012
  14. Feb 02, 2012
  15. Feb 01, 2012
Loading