Skip to content
  1. Apr 14, 2011
  2. Apr 08, 2011
    • John Wiegley's avatar
      Use ExprResult& instead of Expr *& in Sema · 0129629f
      John Wiegley authored
      This patch authored by Eric Niebler.
      
      Many methods on the Sema class (e.g. ConvertPropertyForRValue) take Expr
      pointers as in/out parameters (Expr *&).  This is especially true for the
      routines that apply implicit conversions to nodes in-place.  This design is
      workable only as long as those conversions cannot fail.  If they are allowed
      to fail, they need a way to report their failures.  The typical way of doing
      this in clang is to use an ExprResult, which has an extra bit to signal a
      valid/invalid state.  Returning ExprResult is de riguour elsewhere in the Sema
      interface.  We suggest changing the Expr *& parameters in the Sema interface
      to ExprResult &.  This increases interface consistency and maintainability.
      
      This interface change is important for work supporting MS-style C++
      properties.  For reasons explained here
      <http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-February/013180.html>,
      seemingly trivial operations like rvalue/lvalue conversions that formerly
      could not fail now can.  (The reason is that given the semantics of the
      feature, getter/setter method lookup cannot happen until the point of use, at
      which point it may be found that the method does not exist, or it may have the
      wrong type, or overload resolution may fail, or it may be inaccessible.)
      
      llvm-svn: 129143
      0129629f
  3. Apr 06, 2011
  4. Mar 29, 2011
  5. Mar 28, 2011
  6. Mar 27, 2011
  7. Mar 09, 2011
  8. Mar 08, 2011
  9. Feb 17, 2011
  10. Feb 08, 2011
  11. Feb 07, 2011
    • John McCall's avatar
      A few more tweaks to the blocks AST representation: · 351762cd
      John McCall authored
        - BlockDeclRefExprs always store VarDecls
        - BDREs no longer store copy expressions
        - BlockDecls now store a list of captured variables, information about
          how they're captured, and a copy expression if necessary
          
      With that in hand, change IR generation to use the captures data in       
      blocks instead of walking the block independently.        
      
      Additionally, optimize block layout by emitting fields in descending
      alignment order, with a heuristic for filling in words when alignment
      of the end of the block header is insufficient for the most aligned
      field.
      
      llvm-svn: 125005
      351762cd
  12. Feb 03, 2011
  13. Jan 23, 2011
    • Ted Kremenek's avatar
      Tweak diagnostic: · 499897b4
      Ted Kremenek authored
        error: no super class declared in @interface for 'XXX'
      
      to be:
      
        error: 'X' cannot use 'super' because it is a root class
      
      The latter explains what the user actually did wrong.
      
      Fixes: <rdar://problem/8904409>
      llvm-svn: 124074
      499897b4
  14. Jan 14, 2011
  15. Jan 11, 2011
  16. Dec 22, 2010
  17. Dec 21, 2010
  18. Dec 16, 2010
  19. Dec 10, 2010
  20. Dec 04, 2010
    • John McCall's avatar
      Although we currently have explicit lvalue-to-rvalue conversions, they're · 34376a68
      John McCall authored
      not actually frequently used, because ImpCastExprToType only creates a node
      if the types differ.  So explicitly create an ICE in the lvalue-to-rvalue
      conversion code in DefaultFunctionArrayLvalueConversion() as well as several
      other new places, and consistently deal with the consequences throughout the
      compiler.
      
      In addition, introduce a new cast kind for loading an ObjCProperty l-value,
      and make sure we emit those nodes whenever an ObjCProperty l-value appears
      that's not on the LHS of an assignment operator.
      
      This breaks a couple of rewriter tests, which I've x-failed until future
      development occurs on the rewriter.
      
      Ted Kremenek kindly contributed the analyzer workarounds in this patch.
      
      llvm-svn: 120890
      34376a68
    • Fariborz Jahanian's avatar
      Diagnose when accessing property in a class method and · ecbbb6e9
      Fariborz Jahanian authored
      no property accessor class method to be found, instead of
      crashing in IRGen. // rdar://8703553
      
      llvm-svn: 120855
      ecbbb6e9
  21. Dec 02, 2010
  22. Dec 01, 2010
  23. Nov 18, 2010
  24. Nov 13, 2010
  25. Oct 26, 2010
  26. Oct 19, 2010
  27. Oct 15, 2010
    • Douglas Gregor's avatar
      When performing typo correction, look through the set of known · 57756eab
      Douglas Gregor authored
      identifiers to determine good typo-correction candidates. Once we've
      identified those candidates, we perform name lookup on each of them
      and the consider the results. 
      
      This optimization makes typo correction > 2x faster on a benchmark
      example using a single typo (NSstring) in a tiny file that includes
      Cocoa.h from a precompiled header, since we are deserializing far less
      information now during typo correction.
      
      There is a semantic change here, which is interesting. The presence of
      a similarly-named entity that is not visible can now affect typo
      correction. This is both good (you won't get weird corrections if the
      thing you wanted isn't in scope) and bad (you won't get good
      corrections if there is a similarly-named-but-completely-unrelated
      thing). Time will tell whether it was a good choice or not.
      
      llvm-svn: 116528
      57756eab
  28. Oct 14, 2010
  29. Sep 24, 2010
  30. Sep 16, 2010
    • Douglas Gregor's avatar
      Implement automatic bracket insertion for Objective-C class message · abf4a3e4
      Douglas Gregor authored
      sends. These are far trickier than instance messages, because we
      typically have something like
      
        NSArray alloc]
      
      where it appears to be a declaration of a variable named "alloc" up
      until we see the ']' (or a ':'), and at that point we can't backtrace.
      So, we use a combination of syntactic and semantic disambiguation to
      treat this as a message send only when the type is an Objective-C type
      and it has the syntax of a class message send (which would otherwise
      be ill-formed).
      
      llvm-svn: 114057
      abf4a3e4
    • Douglas Gregor's avatar
      Handle bracket insertion for Objective-C class messages in a very · 3e972009
      Douglas Gregor authored
      narrow, almost useless case where we're inside a parenthesized
      expression, e.g.,
      
        (NSArray alloc])
      
      The solution to the general case still eludes me.
      
      llvm-svn: 114039
      3e972009
  31. Sep 15, 2010
    • Douglas Gregor's avatar
      Implement bracket insertion for Objective-C instance message sends as · e9bba4f1
      Douglas Gregor authored
      part of parser recovery. For example, given:
      
        a method1:arg];
      
      we detect after parsing the expression "a" that we have the start of a
      message send expression. We pretend we've seen a '[' prior to the a,
      then parse the remainder as a message send. We'll then give a
      diagnostic+fix-it such as:
      
      fixit-objc-message.m:17:3: error: missing '[' at start of message
            send expression
        a method1:arg];
        ^
        [
      
      The algorithm here is very simple, and always assumes that the open
      bracket goes at the beginning of the message send. It also only works
      for non-super instance message sends at this time.
      
      llvm-svn: 113968
      e9bba4f1
  32. Aug 27, 2010
  33. Aug 26, 2010
  34. Aug 25, 2010
  35. Aug 24, 2010
Loading