Skip to content
  1. Dec 14, 2012
  2. Dec 01, 2012
  3. Oct 20, 2012
  4. Aug 07, 2012
    • Richard Smith's avatar
      Teach Expr::HasSideEffects about all the Expr types, and fix a bug where it · 0421ce7b
      Richard Smith authored
      was mistakenly classifying dynamic_casts which might throw as having no side
      effects.
      
      Switch it from a visitor to a switch, so it is kept up-to-date as future Expr
      nodes are added. Move it from ExprConstant.cpp to Expr.cpp, since it's not
      really related to constant expression evaluation.
      
      Since we use HasSideEffect to determine whether to emit an unused global with
      internal linkage, this has the effect of suppressing emission of globals in
      some cases.
      
      I've left many of the Objective-C cases conservatively assuming that the
      expression has side-effects. I'll leave it to someone with better knowledge
      of Objective-C than mine to improve them.
      
      llvm-svn: 161388
      0421ce7b
  5. Feb 21, 2012
  6. Feb 20, 2012
    • Douglas Gregor's avatar
      Make sure that we set up the right declaration contexts when creating · 43c3f28c
      Douglas Gregor authored
      and introducing the lambda closure type and its function call
      operator. Previously, we assumed that the lambda closure type would
      land directly in the current context, and not some parent context (as
      occurs with linkage specifications). Thanks to Richard for the test case.
      
      llvm-svn: 150987
      43c3f28c
    • Douglas Gregor's avatar
      When we resolve the type of an 'auto' variable, clear out the linkage · d5c4844e
      Douglas Gregor authored
      of that variable; it will need to be recomputed with the resolved
      type.
      
      llvm-svn: 150984
      d5c4844e
    • Douglas Gregor's avatar
      Basic support for name mangling of C++11 lambda expressions. Because · 63798544
      Douglas Gregor authored
      name mangling in the Itanium C++ ABI for lambda expressions is so
      dependent on context, we encode the number used to encode each lambda
      as part of the lambda closure type, and maintain this value within
      Sema.
      
      Note that there are a several pieces still missing:
        - We still get the linkage of lambda expressions wrong
        - We aren't properly numbering or mangling lambda expressions that
        occur in default function arguments or in data member initializers.
        - We aren't (de-)serializing the lambda numbering tables
      
      llvm-svn: 150982
      63798544
  7. Feb 17, 2012
    • 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
  8. Feb 14, 2012
Loading