Skip to content
  1. Mar 15, 2009
  2. Mar 14, 2009
  3. Mar 13, 2009
    • Douglas Gregor's avatar
      Implement template instantiation for several more kinds of expressions: · 0950e41b
      Douglas Gregor authored
        - C++ function casts, e.g., T(foo)
        - sizeof(), alignof()
      
      More importantly, this allows us to verify that we're performing
      overload resolution during template instantiation, with
      argument-dependent lookup and the "cached" results of name lookup from
      the template definition.
      
      llvm-svn: 66947
      0950e41b
    • Douglas Gregor's avatar
      Refactor the way we handle operator overloading and template · 1baf54e1
      Douglas Gregor authored
      instantiation for binary operators. This change moves most of the
      operator-overloading code from the parser action ActOnBinOp to a new,
      parser-independent semantic checking routine CreateOverloadedBinOp. 
      
      Of particular importance is the fact that CreateOverloadedBinOp does
      *not* perform any name lookup based on the current parsing context (it
      doesn't take a Scope*), since it has to be usable during template
      instantiation, when there is no scope information. Rather, it takes a
      pre-computed set of functions that are visible from the context or via
      argument-dependent lookup, and adds to that set any member operators
      and built-in operator candidates. The set of functions is computed in
      the parser action ActOnBinOp based on the current context (both
      operator name lookup and argument-dependent lookup). Within a
      template, the set computed by ActOnBinOp is saved within the
      type-dependent AST node and is augmented with the results of
      argument-dependent name lookup at instantiation time (see
      TemplateExprInstantiator::VisitCXXOperatorCallExpr).
      
      Sadly, we can't fully test this yet. I'll follow up with template
      instantiation for sizeof so that the real fun can begin.
      
      llvm-svn: 66923
      1baf54e1
    • Steve Naroff's avatar
      Fix <rdar://problem/6675489> BlockDecl should not use llvm::smallvector. · c4b30e59
      Steve Naroff authored
      Also changed BlockDecl API to be more consistent (wrt FunctionDecl).
      
      llvm-svn: 66904
      c4b30e59
    • Steve Naroff's avatar
      Reimplement fix for <rdar://problem/6451399> problems with labels and blocks. · cfb6cf4c
      Steve Naroff authored
      This solution is much simpler (and doesn't add any per-scope overhead, which concerned Chris). 
      
      The only downside is the LabelMap is now declared in two places (Sema and BlockSemaInfo). My original fix tried to unify the LabelMap in "Scope" (which would support nested functions in general). In any event, this fixes the bug given the current language definition. If/when we decide to support GCC style nested functions, this will need to be tweaked.
      
      llvm-svn: 66896
      cfb6cf4c
    • Steve Naroff's avatar
      Remove ActiveScope (revert... · 846b1ec4
      Steve Naroff authored
      Remove ActiveScope (revert http://llvm.org/viewvc/llvm-project?view=rev&revision=65694 and http://llvm.org/viewvc/llvm-project?view=rev&revision=66741).
      
      Will replace with something better today...
      
      llvm-svn: 66893
      846b1ec4
    • Douglas Gregor's avatar
      Improve the representation of operator expressions like "x + y" within · d2b7ef6e
      Douglas Gregor authored
      C++ templates. In particular, keep track of the overloaded operators
      that are visible from the template definition, so that they can be
      merged with those operators visible via argument-dependent lookup at
      instantiation time. 
      
      Refactored the lookup routines for argument-dependent lookup and for
      operator name lookup, so they can be called without immediately adding
      the results to an overload set.
      
      Instantiation of these expressions is completely wrong. I'll work on
      that next.
      
      llvm-svn: 66851
      d2b7ef6e
  4. Mar 12, 2009
  5. Mar 11, 2009
  6. Mar 10, 2009
  7. Mar 09, 2009
  8. Mar 08, 2009
  9. Mar 07, 2009
  10. Mar 06, 2009
  11. Mar 05, 2009
  12. Mar 04, 2009
  13. Mar 03, 2009
  14. Mar 02, 2009
  15. Feb 28, 2009
  16. Feb 27, 2009
    • Ted Kremenek's avatar
      In BuildAnonymousStructUnionMemberReference, we shouldn't invalidate OpLoc when · e879e15e
      Ted Kremenek authored
      building nested member expressions. This location is used to determine the range
      of the entire expression, and the expression itself already has its location
      inherited from its Base.
      
      This fixes <rdar://problem/6629829>.
      
      llvm-svn: 65650
      e879e15e
    • Eli Friedman's avatar
      Change the AST generated for offsetof a bit so that it looks like a · 988a16b9
      Eli Friedman authored
      normal expression, and change Evaluate and IRGen to evaluate it like a 
      normal expression.  This simplifies the code significantly, and fixes 
      PR3396.
      
      llvm-svn: 65622
      988a16b9
    • Douglas Gregor's avatar
      Create a new TypeNodes.def file that enumerates all of the types, · deaad8cc
      Douglas Gregor authored
      giving them rough classifications (normal types, never-canonical
      types, always-dependent types, abstract type representations) and
      making it far easier to make sure that we've hit all of the cases when
      decoding types. 
      
      Switched some switch() statements on the type class over to using this
      mechanism, and filtering out those things we don't care about. For
      example, CodeGen should never see always-dependent or non-canonical
      types, while debug info generation should never see always-dependent
      types. More switch() statements on the type class need to be moved 
      over to using this approach, so that we'll get warnings when we add a
      new type then fail to account for it somewhere in the compiler.
      
      As part of this, some types have been renamed:
      
        TypeOfExpr -> TypeOfExprType
        FunctionTypeProto -> FunctionProtoType
        FunctionTypeNoProto -> FunctionNoProtoType
      
      There shouldn't be any functionality change...
      
      llvm-svn: 65591
      deaad8cc
    • Chris Lattner's avatar
      d42c29f9
  17. Feb 26, 2009
    • Douglas Gregor's avatar
      Introduce code modification hints into the diagnostics system. When we · 87f95b0a
      Douglas Gregor authored
      know how to recover from an error, we can attach a hint to the
      diagnostic that states how to modify the code, which can be one of:
      
        - Insert some new code (a text string) at a particular source
          location
        - Remove the code within a given range
        - Replace the code within a given range with some new code (a text
          string)
      
      Right now, we use these hints to annotate diagnostic information. For
      example, if one uses the '>>' in a template argument in C++98, as in
      this code:
      
        template<int I> class B { };
        B<1000 >> 2> *b1;
      
      we'll warn that the behavior will change in C++0x. The fix is to
      insert parenthese, so we use code insertion annotations to illustrate
      where the parentheses go:
      
      test.cpp:10:10: warning: use of right-shift operator ('>>') in template
      argument will require parentheses in C++0x
        B<1000 >> 2> *b1;
               ^
          (        )
      
      
      Use of these annotations is partially implemented for HTML
      diagnostics, but it's not (yet) producing valid HTML, which may be
      related to PR2386, so it has been #if 0'd out.
      
      In this future, we could consider hooking this mechanism up to the
      rewriter to actually try to fix these problems during compilation (or,
      after a compilation whose only errors have fixes). For now, however, I
      suggest that we use these code modification hints whenever we can, so
      that we get better diagnostics now and will have better coverage when
      we find better ways to use this information.
      
      This also fixes PR3410 by placing the complaint about missing tokens
      just after the previous token (rather than at the location of the next
      token).
      
      llvm-svn: 65570
      87f95b0a
    • Sebastian Redl's avatar
      8d2ccae2
  18. Feb 25, 2009
Loading