Skip to content
Snippets Groups Projects
  1. Dec 05, 2017
    • Shoaib Meenai's avatar
      [CMake] Use PRIVATE in target_link_libraries for executables · 456e35cb
      Shoaib Meenai authored
      We currently use target_link_libraries without an explicit scope
      specifier (INTERFACE, PRIVATE or PUBLIC) when linking executables.
      Dependencies added in this way apply to both the target and its
      dependencies, i.e. they become part of the executable's link interface
      and are transitive.
      
      Transitive dependencies generally don't make sense for executables,
      since you wouldn't normally be linking against an executable. This also
      causes issues for generating install export files when using
      LLVM_DISTRIBUTION_COMPONENTS. For example, clang has a lot of LLVM
      library dependencies, which are currently added as interface
      dependencies. If clang is in the distribution components but the LLVM
      libraries it depends on aren't (which is a perfectly legitimate use case
      if the LLVM libraries are being built static and there are therefore no
      run-time dependencies on them), CMake will complain about the LLVM
      libraries not being in export set when attempting to generate the
      install export file for clang. This is reasonable behavior on CMake's
      part, and the right thing is for LLVM's build system to explicitly use
      PRIVATE dependencies for executables.
      
      Unfortunately, CMake doesn't allow you to mix and match the keyword and
      non-keyword target_link_libraries signatures for a single target; i.e.,
      if a single call to target_link_libraries for a particular target uses
      one of the INTERFACE, PRIVATE, or PUBLIC keywords, all other calls must
      also be updated to use those keywords. This means we must do this change
      in a single shot. I also fully expect to have missed some instances; I
      tested by enabling all the projects in the monorepo (except dragonegg),
      and configuring both with and without shared libraries, on both Darwin
      and Linux, but I'm planning to rely on the buildbots for other
      configurations (since it should be pretty easy to fix those).
      
      Even after this change, we still have a lot of target_link_libraries
      calls that don't specify a scope keyword, mostly for shared libraries.
      I'm thinking about addressing those in a follow-up, but that's a
      separate change IMO.
      
      Differential Revision: https://reviews.llvm.org/D40823
      
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@319840 91177308-0d34-0410-b5e6-96231b3b80d8
      456e35cb
  2. Sep 27, 2017
    • Sean Callanan's avatar
      Add support for remembering origins to ExternalASTMerger · 87d985ae
      Sean Callanan authored
      ExternalASTMerger has hitherto relied on being able to look up 
      any Decl through its named DeclContext chain. This works for 
      many cases, but causes problems for function-local structs, 
      which cannot be looked up in their containing FunctionDecl. An
      example case is
      
      void f() {
        { struct S { int a; }; }
        { struct S { bool b; }; }
      }
      
      It is not possible to lookup either of the two Ses individually 
      (or even to provide enough information to disambiguate) after 
      parsing is over; and there is typically no need to, since they 
      are invisible to the outside world.
      
      However, ExternalASTMerger needs to be able to complete either 
      S on demand. This led to an XFAIL on test/Import/local-struct, 
      which this patch removes. The way the patch works is:
      
      It defines a new data structure, ExternalASTMerger::OriginMap,
      which clients are expected to maintain (default-constructing 
      if the origin does not have an ExternalASTMerger servicing it)
      As DeclContexts are imported, if they cannot be looked up by 
      name they are placed in the OriginMap. This allows 
      ExternalASTMerger to complete them later if necessary.
      As DeclContexts are imported from an origin that already has 
      its own OriginMap, the origins are forwarded – but only for 
      those DeclContexts that are actually used. This keeps the 
      amount of stored data minimal.
      
      The patch also applies several improvements from review:
      
      - Thoroughly documents the interface to ExternalASTMerger;
      - Adds optional logging to help track what's going on; and
      - Cleans up a bunch of braces and dangling elses.
      
      Differential Revision: https://reviews.llvm.org/D38208
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@314336 91177308-0d34-0410-b5e6-96231b3b80d8
      87d985ae
  3. Aug 08, 2017
  4. Jul 25, 2017
  5. Jul 11, 2017
  6. Jun 20, 2017
  7. May 13, 2017
    • Sean Callanan's avatar
      [ASTImporter] Improve handling of incomplete types · 848b631d
      Sean Callanan authored
      ASTImporter has some bugs when it's importing types 
      that themselves come from an ExternalASTSource. This 
      is exposed particularly in the behavior when 
      comparing complete TagDecls with forward 
      declarations. This patch does several things:
      
      - Adds a test case making sure that conflicting 
        forward-declarations are resolved correctly;
      - Extends the clang-import-test harness to test 
        two-level importing, so that we make sure we 
        complete types when necessary; and
      - Fixes a few bugs I found this way. Failure to 
        complete types was one; however, I also discovered 
        that complete RecordDecls aren't properly added to 
        the redecls chain for existing forward 
        declarations.
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@302975 91177308-0d34-0410-b5e6-96231b3b80d8
      848b631d
  8. Apr 11, 2017
    • Sean Callanan's avatar
      [clang-import-test] Lookup inside contexts · 3975e671
      Sean Callanan authored
      clang-import-test has until now been only able to report top-level Decls.
      This is clearly insufficient; we should be able to look inside structs 
      and namespaces also.  This patch adds new test cases for a variety of 
      lookups inside existing ASTContexts, and adds the functionality necessar
      to make most of these testcases work.  (One testcase is known to fail 
      because of ASTImporter limitations when importing templates; I'll look 
      into that separately.)
      
      This patch also separates the core functionality out into 
      ExternalASTMerger, an interface that allows clients like LLDB to make 
      use of it.  clang-import-test now only has the machinery necessary to
      set up the tests.
      
      Differential revision: https://reviews.llvm.org/D30435
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@299976 91177308-0d34-0410-b5e6-96231b3b80d8
      3975e671
  9. Jan 06, 2017
  10. Jan 05, 2017
  11. Dec 22, 2016
    • Sean Callanan's avatar
      Testbed and skeleton of a new expression parser · 7488de2e
      Sean Callanan authored
      Recommitted after formal approval.
      
      LLVM's JIT is now the foundation of dynamic-compilation features for many languages. Clang also has low-level support for dynamic compilation (ASTImporter and ExternalASTSource, notably). How the compiler is set up for dynamic parsing is generally left up to individual clients, for example LLDB's C/C++/Objective-C expression parser and the ROOT project.
      
      Although this arrangement offers external clients the flexibility to implement dynamic features as they see fit, the lack of an in-tree client means that subtle bugs can be introduced that cause regressions in the external clients but aren't caught by tests (or users) until much later. LLDB for example regularly encounters complicated ODR violation scenarios where it is not immediately clear who is at fault.
      
      Other external clients (notably, Cling) rely on similar functionality, and another goal is to break this functionality up into composable parts so that any client can be built easily on top of Clang without requiring extensive additional code.
      
      I propose that the parts required to build a simple expression parser be added to Clang. Initially, I aim to have the following features:
      
      A piece that looks up external declarations from a variety of sources (e.g., from previous dynamic compilations, from modules, or from DWARF) and uses clear conflict resolution rules to reconcile differences, with easily understood errors. This functionality will be supported by in-tree tests.
      A piece that works hand in hand with the LLVM JIT to resolve the locations of external declarations so that e.g. variables can be redeclared and (for high-performance applications like DTrace) external variables can be accessed directly from the registers where they reside.
      This commit adds a tester that parses a sequence of source files and then uses them as source data for an expression. External references are resolved using an ExternalASTSource that responds to name queries using an ASTImporter. This is the setup that LLDB uses, and the motivating reason for MinimalImport in ASTImporter. When complete, this tester will implement the first of the above goals.
      
      Differential Revision: https://reviews.llvm.org/D27180
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290367 91177308-0d34-0410-b5e6-96231b3b80d8
      7488de2e
  12. Dec 19, 2016
  13. Dec 17, 2016
    • Sean Callanan's avatar
      Added clangLex to the dependencies for clang-import-test. · 66d4c44d
      Sean Callanan authored
      This is part of the effort to get the i686-mingw32-RA-on-linux bot to like clang-import-test.
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290010 91177308-0d34-0410-b5e6-96231b3b80d8
      66d4c44d
    • Sean Callanan's avatar
      f5c08150
    • Sean Callanan's avatar
      Testbed and skeleton of a new expression parser · f7e51dd6
      Sean Callanan authored
      LLVM's JIT is now the foundation of dynamic-compilation features for many languages. Clang also has low-level support for dynamic compilation (ASTImporter and ExternalASTSource, notably). How the compiler is set up for dynamic parsing is generally left up to individual clients, for example LLDB's C/C++/Objective-C expression parser and the ROOT project.
      
      Although this arrangement offers external clients the flexibility to implement dynamic features as they see fit, the lack of an in-tree client means that subtle bugs can be introduced that cause regressions in the external clients but aren't caught by tests (or users) until much later. LLDB for example regularly encounters complicated ODR violation scenarios where it is not immediately clear who is at fault.
      
      Other external clients (notably, Cling) rely on similar functionality, and another goal is to break this functionality up into composable parts so that any client can be built easily on top of Clang without requiring extensive additional code.
      
      I propose that the parts required to build a simple expression parser be added to Clang.  Initially, I aim to have the following features:
      
      - A piece that looks up external declarations from a variety of sources (e.g., from previous dynamic compilations, from modules, or from DWARF) and uses clear conflict resolution rules to reconcile differences, with easily understood errors. This functionality will be supported by in-tree tests.
      
      - A piece that works hand in hand with the LLVM JIT to resolve the locations of external declarations so that e.g. variables can be redeclared and (for high-performance applications like DTrace) external variables can be accessed directly from the registers where they reside.
      
      This commit adds a tester that parses a sequence of source files and then uses them as source data for an expression. External references are resolved using an ExternalASTSource that responds to name queries using an ASTImporter. This is the setup that LLDB uses, and the motivating reason for MinimalImport in ASTImporter.  When complete, this tester will implement the first of the above goals.
      
      Differential Revision: https://reviews.llvm.org/D27180
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290004 91177308-0d34-0410-b5e6-96231b3b80d8
      f7e51dd6
Loading