Skip to content
  1. Mar 22, 2009
  2. Mar 19, 2009
    • Douglas Gregor's avatar
      Variables marked as "extern" can actually have internal linkage if · 3731162a
      Douglas Gregor authored
      there is a previous declaration marked "static". This fixes PR3645.
      
      llvm-svn: 67336
      3731162a
    • Douglas Gregor's avatar
      Add a clarifying comment about HasPrototype's computation · 2797d329
      Douglas Gregor authored
      llvm-svn: 67316
      2797d329
    • Douglas Gregor's avatar
      If a function is declared as, e.g., · 3729f240
      Douglas Gregor authored
        F f;
      
      where F is a typedef of a function type, then the function "f" has a
      prototype. This is a slight tweak to Chris's suggested fix in
      PR3817. Fixes PR3817 and PR3840.
      
      llvm-svn: 67313
      3729f240
    • Douglas Gregor's avatar
      Introduce a new expression type, UnresolvedDeclRefExpr, that describes · 90a1a651
      Douglas Gregor authored
      dependent qualified-ids such as
      
        Fibonacci<N - 1>::value
      
      where N is a template parameter. These references are "unresolved"
      because the name is dependent and, therefore, cannot be resolved to a
      declaration node (as we would do for a DeclRefExpr or
      QualifiedDeclRefExpr). UnresolvedDeclRefExprs instantiate to
      DeclRefExprs, QualifiedDeclRefExprs, etc.
      
      Also, be a bit more careful about keeping only a single set of
      specializations for a class template, and instantiating from the
      definition of that template rather than a previous declaration. In
      general, we need a better solution for this for all TagDecls, because
      it's too easy to accidentally look at a declaration that isn't the
      definition.
      
      We can now process a simple Fibonacci computation described as a
      template metaprogram.
      
      llvm-svn: 67308
      90a1a651
    • Douglas Gregor's avatar
      Extend the use of QualifiedNameType to the creation of class template · e177b725
      Douglas Gregor authored
      specialization names. This way, we keep track of sugared types like
      
        std::vector<Real>
      
      I believe we are now using QualifiedNameTypes everywhere we can. Next
      step: QualifiedDeclRefExprs.
      
      llvm-svn: 67268
      e177b725
    • Douglas Gregor's avatar
      Introduce a representation for types that we referred to via a · 5253768a
      Douglas Gregor authored
      qualified name, e.g., 
      
        foo::x
      
      so that we retain the nested-name-specifier as written in the source
      code and can reproduce that qualified name when printing the types
      back (e.g., in diagnostics). This is PR3493, which won't be complete
      until finished the other tasks mentioned near the end of this commit.
      
      The parser's representation of nested-name-specifiers, CXXScopeSpec,
      is now a bit fatter, because it needs to contain the scopes that
      precede each '::' and keep track of whether the global scoping
      operator '::' was at the beginning. For example, we need to keep track
      of the leading '::', 'foo', and 'bar' in
       
        ::foo::bar::x
      
      The Action's CXXScopeTy * is no longer a DeclContext *. It's now the
      opaque version of the new NestedNameSpecifier, which contains a single
      component of a nested-name-specifier (either a DeclContext * or a Type
      *, bitmangled). 
      
      The new sugar type QualifiedNameType composes a sequence of
      NestedNameSpecifiers with a representation of the type we're actually
      referring to. At present, we only build QualifiedNameType nodes within
      Sema::getTypeName. This will be extended to other type-constructing
      actions (e.g., ActOnClassTemplateId).
      
      Also on the way: QualifiedDeclRefExprs will also store a sequence of
      NestedNameSpecifiers, so that we can print out the property
      nested-name-specifier. I expect to also use this for handling
      dependent names like Fibonacci<I - 1>::value.
      
      llvm-svn: 67265
      5253768a
  3. Mar 18, 2009
  4. Mar 17, 2009
    • Douglas Gregor's avatar
      Implement instantiation of enums within class templates. This isn't · 954f6b27
      Douglas Gregor authored
      quite as great as it sounds, because, while we can refer to the
      enumerator values outside the template, e.g.,
      
        adder<long, 3, 4>::value
      
      we can't yet refer to them with dependent names, so no Fibonacci
      (yet). 
      
      InstantiateClassTemplateSpecialization is getting messy; next commit
      will put it into a less-ugly state.
      
      llvm-svn: 67092
      954f6b27
  5. Mar 16, 2009
  6. Mar 13, 2009
  7. Mar 12, 2009
  8. Mar 11, 2009
  9. Mar 10, 2009
  10. Mar 09, 2009
  11. Mar 07, 2009
  12. Mar 06, 2009
  13. Mar 05, 2009
  14. Mar 04, 2009
  15. Mar 03, 2009
    • Douglas Gregor's avatar
      Implement the basics of implicit instantiation of class templates, in · 463421de
      Douglas Gregor authored
      response to attempts to diagnose an "incomplete" type. This will force
      us to use DiagnoseIncompleteType more regularly (rather than looking at
      isIncompleteType), but that's also a good thing.
      
      Implicit instantiation is still very simplistic, and will create a new
      definition for the class template specialization (as it should) but it
      only actually instantiates the base classes and attaches
      those. Actually instantiating class members will follow. 
      
      Also, instantiate the types of non-type template parameters before
      checking them,  allowing, e.g., 
      
        template<typename T, T Value> struct Constant; 
       
      to work properly.
      
      llvm-svn: 65924
      463421de
  16. Mar 02, 2009
    • Douglas Gregor's avatar
      Rework the way we find locally-scoped external declarations when we · 5a80bd15
      Douglas Gregor authored
      need them to evaluate redeclarations or call a function that hasn't
      already been declared. We now keep a DenseMap of these locally-scoped
      declarations so that they are not visible but can be quickly found,
      e.g., when we're looking for previous declarations or before we go
      ahead and implicitly declare a function that's being called. Fixes
      PR3672.
      
      llvm-svn: 65792
      5a80bd15
  17. Mar 01, 2009
  18. Feb 28, 2009
Loading