Skip to content
  1. Apr 11, 2009
    • Chris Lattner's avatar
      347eec9d
    • Chris Lattner's avatar
      Improve the 'cannot pass objc interface by value' diagnostic: · de5a5316
      Chris Lattner authored
      1) improve localizability by not passing english strings in.
      2) improve location for arguments.
      3) print the objc type being passed.
      
      Before:
      method-bad-param.m:15:1: error: Objective-C type cannot be passed by value
      -(void) my_method:(foo) my_param
      ^
      
      after:
      method-bad-param.m:15:25: error: Objective-C interface type 'foo' cannot be passed by value
      -(void) my_method:(foo) my_param
                              ^
      
      llvm-svn: 68872
      de5a5316
    • Douglas Gregor's avatar
      Compare the predefines buffer in the PCH file with the predefines · 92863e47
      Douglas Gregor authored
      buffer generated for the current translation unit. If they are
      different, complain and then ignore the PCH file. This effectively
      checks for all compilation options that somehow would affect
      preprocessor state (-D, -U, -include, the dreaded -imacros, etc.).
      
      When we do accept the PCH file, throw away the contents of the
      predefines buffer rather than parsing them, since all of the results
      of that parsing are already stored in the PCH file. This eliminates
      the ugliness with the redefinition of __builtin_va_list, among other
      things.
      
      llvm-svn: 68838
      92863e47
  2. Apr 10, 2009
    • Douglas Gregor's avatar
      Various minor fixes to PCH reading and writing, with general · 1e9bf3ba
      Douglas Gregor authored
      cleanup. Aside from a minor tweak to the PCH file format, no
      functionality change. 
      
      llvm-svn: 68793
      1e9bf3ba
    • Douglas Gregor's avatar
      Implementation of pre-compiled headers (PCH) based on lazy · ef84c4b4
      Douglas Gregor authored
      de-serialization of abstract syntax trees.
      
      PCH support serializes the contents of the abstract syntax tree (AST)
      to a bitstream. When the PCH file is read, declarations are serialized
      as-needed. For example, a declaration of a variable "x" will be
      deserialized only when its VarDecl can be found by a client, e.g.,
      based on name lookup for "x" or traversing the entire contents of the
      owner of "x".
      
      This commit provides the framework for serialization and (lazy)
      deserialization, along with support for variable and typedef
      declarations (along with several kinds of types). More
      declarations/types, along with important auxiliary structures (source
      manager, preprocessor, etc.), will follow.
      
      llvm-svn: 68732
      ef84c4b4
  3. Apr 09, 2009
  4. Apr 08, 2009
  5. Apr 07, 2009
  6. Apr 02, 2009
  7. Apr 01, 2009
    • Douglas Gregor's avatar
      Make parsing a semantic analysis a little more robust following Sema · fe3d7d08
      Douglas Gregor authored
      failures that involve malformed types, e.g., "typename X::foo" where
      "foo" isn't a type, or "std::vector<void>" that doens't instantiate
      properly.
      
      Similarly, be a bit smarter in our handling of ambiguities that occur
      in Sema::getTypeName, to eliminate duplicate error messages about
      ambiguous name lookup.
      
      This eliminates two XFAILs in test/SemaCXX, one of which was crying
      out to us, trying to tell us that we were producing repeated error
      messages.
      
      llvm-svn: 68251
      fe3d7d08
  8. Mar 31, 2009
  9. Mar 29, 2009
    • Chris Lattner's avatar
      Push DeclGroup much farther throughout the compiler. Now the various · 5bbb3c8a
      Chris Lattner authored
      productions (except the already broken ObjC cases like @class X,Y;) in 
      the parser that can produce more than one Decl return a DeclGroup instead
      of a Decl, etc.
      
      This allows elimination of the Decl::NextDeclarator field, and exposes
      various clients that should look at all decls in a group, but which were
      only looking at one (such as the dumper, printer, etc).  These have been
      fixed.
      
      Still TODO:
      
      1) there are some FIXME's in the code about potentially using
      DeclGroup for better location info.
      2) ParseObjCAtDirectives should return a DeclGroup due to @class etc.
      3) I'm not sure what is going on with StmtIterator.cpp, or if it can
         be radically simplified now.
      4) I put a truly horrible hack in ParseTemplate.cpp.
      
      I plan to bring up #3/4 on the mailing list, but don't plan to tackle
      #1/2 in the short term.
      
      llvm-svn: 68002
      5bbb3c8a
  10. Mar 28, 2009
    • Chris Lattner's avatar
      Introduce a new OpaquePtr<N> struct type, which is a simple POD wrapper for a · 83f095cc
      Chris Lattner authored
      pointer.  Its purpose in life is to be a glorified void*, but which does not
      implicitly convert to void* or other OpaquePtr's with a different UID.
      
      Introduce Action::DeclPtrTy which is a typedef for OpaquePtr<0>.  Change the 
      entire parser/sema interface to use DeclPtrTy instead of DeclTy*.  This
      makes the C++ compiler enforce that these aren't convertible to other opaque
      types.
      
      We should also convert ExprTy, StmtTy, TypeTy, AttrTy, BaseTy, etc,
      but I don't plan to do that in the short term.
      
      The one outstanding known problem with this patch is that we lose the 
      bitmangling optimization where ActionResult<DeclPtrTy> doesn't know how to
      bitmangle the success bit into the low bit of DeclPtrTy.  I will rectify
      this with a subsequent patch.
      
      llvm-svn: 67952
      83f095cc
  11. Mar 27, 2009
  12. Mar 26, 2009
  13. Mar 25, 2009
  14. Mar 24, 2009
    • Douglas Gregor's avatar
      Make sure to use RequireCompleteType rather than testing for · ac1fb65d
      Douglas Gregor authored
      incomplete types. RequireCompleteType is needed when the type may be
      completed by instantiating a template.
      
      llvm-svn: 67643
      ac1fb65d
    • Anders Carlsson's avatar
      More work on diagnosing abstract classes. We can now handle cases like · b5a27b46
      Anders Carlsson authored
      class C {
        void g(C c);
      
        virtual void f() = 0;
      };
      
      In this case, C is not known to be abstract when doing semantic analysis on g. This is done by recursively traversing the abstract class and checking the types of member functions. 
      
      llvm-svn: 67594
      b5a27b46
    • Douglas Gregor's avatar
      Template instantiation for the declarations of member functions within · f4f296de
      Douglas Gregor authored
      a class template. At present, we can only instantiation normal
      methods, but not constructors, destructors, or conversion operators.
      
      As ever, this contains a bit of refactoring in Sema's type-checking. In
      particular:
      
        - Split ActOnFunctionDeclarator into ActOnFunctionDeclarator
          (handling the declarator itself) and CheckFunctionDeclaration
          (checking for the the function declaration), the latter of which
          is also used by template instantiation.
        - We were performing the adjustment of function parameter types in
          three places; collect those into a single new routine.
        - When the type of a parameter is adjusted, allocate an
          OriginalParmVarDecl to keep track of the type as it was written.
        - Eliminate a redundant check for out-of-line declarations of member
          functions; hide more C++-specific checks on function declarations
          behind if(getLangOptions().CPlusPlus).
      
      llvm-svn: 67575
      f4f296de
  15. Mar 23, 2009
  16. Mar 22, 2009
  17. 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
Loading