1. Mar 03, 2021
    • Jonas Paulsson's avatar
      [SystemZ] Assign the full space for promoted and split outgoing args. · 52bbbf4d
      Jonas Paulsson authored
      When a large "irregular" (e.g. i96) integer call argument is converted to
      indirect, 64-bit parts are stored to the stack. The full stack space
      (e.g. i128) was not allocated prior to this patch, but rather just the exact
      space of the original type. This caused neighboring values on the stack to be
      overwritten.
      
      Thanks to Josh Stone for reporting this.
      
      Review: Ulrich Weigand
      Fixes https://bugs.llvm.org/show_bug.cgi?id=49322
      Differential Revision: https://reviews.llvm.org/D97514
      52bbbf4d
    • Peter Steinfeld's avatar
      [flang] Detect circularly defined interfaces of procedures · 95540f9d
      Peter Steinfeld authored
      It's possible to define a procedure whose interface depends on a procedure
      which has an interface that depends on the original procedure.  Such a circular
      definition was causing the compiler to fall into an infinite loop when
      resolving the name of the second procedure.  It's also possible to create
      circular dependency chains of more than two procedures.
      
      I fixed this by adding the function HasCycle() to the class DeclarationVisitor
      and calling it from DeclareProcEntity() to detect procedures with such
      circularly defined interfaces.  I marked the associated symbols of such
      procedures by calling SetError() on them.  When processing subsequent
      procedures, I called HasError() before attempting to analyze their interfaces.
      Unfortunately, this did not work.
      
      With help from Tim, we determined that the SymbolSet used to track the
      erroneous symbols was instantiated using a "<" operator which was defined using
      the location of the name of the procedure.  But the location of the procedure
      name was being changed by a call to ReplaceName() between the times that the
      calls to SetError() and HasError() were made.  This caused HasError() to
      incorrectly report that a symbol was not in the set of erroneous symbols.
      
      I fixed this by changing SymbolSet to be an unordered set that uses the
      contents of the name of the symbol as the basis for its hash function.  This
      works because the contents of the name of the symbol is preserved by
      ReplaceName() even though its location changes.
      
      I also fixed the error message used when reporting recursively defined
      dummy procedure arguments by removing extra apostrophes and sorting the
      list of symbols.
      
      I also added tests that will crash the compiler without this change.
      
      Note that the "<" operator is used in other contexts, for example, in the map
      of characterized procedures, maps of items in equivalence sets, maps of
      structure constructor values, ...  All of these situations happen after name
      resolution has been completed and all calls to ReplaceName() have already
      happened and thus are not subject to the problem I ran into when ReplaceName()
      was called when processing procedure entities.
      
      Note also that the implementation of the "<" operator uses the relative
      location in the cooked character stream as the basis of its implementation.
      This is potentially problematic when symbols from diffent compilation units
      (for example symbols originating in .mod files) are put into the same map since
      their names will appear in two different source streams which may not be
      allocated in the same relative positions in memory.  But I was unable to create
      a test that caused a problem.  Using a direct comparison of the content of the
      name of the symbol in the "<" operator has problems.  Symbols in enclosing or
      parallel scopes can have the same name.  Also using the location of the symbol
      in the cooked character stream has the advantage that it preserves the the
      order of the symbols in a structure constructor constant, which makes matching
      the values with the symbols relatively easy.
      
      This patch supersedes D97749.
      
      Differential Revision: https://reviews.llvm.org/D97774
      95540f9d
    • Nico Weber's avatar
      253a6606
    • Joe Nash's avatar
      [AMDGPU] Make OMod explicit for V_CVT_{U,I}* · 5531f24c
      Joe Nash authored
      Make OMod explicit instead of implied by HasModifiers in the
      operand list. Requires explicitly setting HasOMod=1 for
      irregular OMod usage in instruction V_CVT_{U,I}*
      
      Reviewed By: foad
      
      Differential Revision: https://reviews.llvm.org/D97587
      
      Change-Id: I230e1476f529e816eec60e242531f23a99e3839f
      5531f24c
    • Martin Storsjö's avatar
      [libcxx] [test] Fix a test error with condvars with trivial destruction · 4adb4bca
      Martin Storsjö authored
      If the destructor is trivial (_LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION,
      the constructor always is), the compiler warns about the
      std::condition_variable being unused.
      
      Add a cast to void to silence the warning about the object being unused.
      
      Differential Revision: https://reviews.llvm.org/D97540
      4adb4bca
    • Andrzej Warzynski's avatar
      bf4dbc49
    • Louis Dionne's avatar
      [libc++] Add a utility script to run the Docker image used by builders · c5659dd4
      Louis Dionne authored
      Several contributors have been asking me how to reproduce the CI
      environment locally. This is the last step towards making that work
      out-of-the-box. Basically, just run `libcxx/utils/ci/run-buildbot-container`
      and you're good to go.
      
      Differential Revision: https://reviews.llvm.org/D97782
      c5659dd4
    • Jez Ng's avatar
      [clang+lld] Pass -platform_version args to ld64.lld · 18fa1d38
      Jez Ng authored
      Fix regression where we aren't passing `-platform_version` to new ld64.lld after {D95204}.
      
      Most of the changes were originally in D95204, but I backed them out due to
      test failures on builds which have `CLANG_DEFAULT_LINKER=lld`. The tests are
      properly updated in this diff.
      
      Reviewed By: #lld-macho, thakis
      
      Differential Revision: https://reviews.llvm.org/D97741
      18fa1d38
    • Arnamoy Bhattacharyya's avatar
      [flang][driver] Fix -fdefault* family bug · 563ea450
      Arnamoy Bhattacharyya authored
      This patch provides a fix for the `fdefault-*` family in f18
      
      (Please consult `D96344` for details)
      
      Differential Revision: https://reviews.llvm.org/D97724
      563ea450
    • Vy Nguyen's avatar
      [lld-macho] Change loadReexport to handle the case where a TAPI re-exports to... · 9a2e2de1
      Vy Nguyen authored
      [lld-macho] Change loadReexport to handle the case where a TAPI re-exports to reference documents nested within other TBD.
      
      Currently, it was delibrately impleneted to not handle this case, but as it has turnt out, we need this feature.
      The concrete use case is
             `System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa` reexports
                     /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit , which then rexports
                          /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation
      
      The current implemention uses a global currentTopLevelTapi, which is not reset until it finishes loading the whole tree.
      This is a problem because if the top-level is set to Cocoa, then when we get to UIFoundation, it will try to find UIFoundation in the current top level, which is Cocoa and will not find it.
      
      The right thing should be:
       - When loading a library from a TBD file, re-exports need to be looked up in the auxiliary documents within the same TBD.
       - When loading from an actual dylib, no additional TBD documents need to be examined.
       - In no case does a re-export mentioned in one TBD file need to be looked up in a document in an auxiliary document from a different TBD file
      
      Differential Revision: https://reviews.llvm.org/D97438
      9a2e2de1
    • Krzysztof Parzyszek's avatar
      [TableGen] Add IntrNoMerge as intrinsic property · d96b5e60
      Krzysztof Parzyszek authored
      There is a function attribute 'nomerge' in addition to 'noduplicate'
      and 'convergent'. Both 'noduplicate' and 'convergent' have corresponding
      intrinsic properties. This patch adds an intrinsic property for the
      'nomerge' attribute.
      
      Differential Revision: https://reviews.llvm.org/D96364
      d96b5e60
    • Utkarsh Saxena's avatar
    • Fraser Cormack's avatar
      [RISCV] Support fixed-length INSERT_VECTOR_ELT · c1695ddf
      Fraser Cormack authored
      This patch enables support for lowering INSERT_VECTOR_ELT on
      fixed-length vector types. The strategy follows that for scalable vector
      types.
      
      This patch also includes a quick fix to prevent the compiler infinitely
      looping between lowering BUILD_VECTOR as VECTOR_SHUFFLE and back again.
      
      Reviewed By: craig.topper
      
      Differential Revision: https://reviews.llvm.org/D97698
      c1695ddf
    • Sam McCall's avatar
      [clangd] Include macro expansions in documentSymbol hierarchy · 91679c95
      Sam McCall authored
      Browsing macro-generated symbols is confusing.
      On the one hand, it seems very *useful* to be able to see the summary of
      symbols that were generated.
      On the other hand, some macros spew a lot of confusing symbols into the
      namespace and when used repeatedly (ABSL_FLAG) can create a lot of spam
      that's hard to navigate.
      
      Design constraints:
       - the macro expansion tree need not align with the AST, though it often
         does in practice.
         We address this by defining the nesting based on the *primary*
         location of decls, rather than their ranges.
       - DocumentSymbol.children[*].range should nest within DocumentSymbol.range
         (This constraint is not in LSP "breadcrumbs" breaks without it)
         We adjust macro ranges so they cover their "children", rather than
         just the macro expansion
       - LSP does not have a "macro expansion" symbolkind, nor does it allow a
         symbol to have no kind. I've arbitrarily picked "null" as this is
         unlikely to conflict with anything useful.
      
      This patch makes all macros and children visible for simplicity+consistency,
      though in some cases it may be better to elide the macro node.
      We may consider adding heuristics for this in future (e.g. when it expands
      to one decl only?) but it doesn't seem clear-cut to me.
      
      Differential Revision: https://reviews.llvm.org/D97615
      91679c95
    • Alexey Bataev's avatar
    • dfukalov's avatar
      [AA] Cache (optionally) estimated PartialAlias offsets. · 6e967834
      dfukalov authored
      For the cases of two clobbering loads and one loaded object is fully contained
      in the second `BasicAAResult::aliasGEP` returns just `PartialAlias` that
      is actually more common case of partial overlap, it doesn't say anything about
      actual overlapping sizes.
      
      AA users such as GVN and DSE have no functionality to estimate aliasing of GEPs
      with non-constant offsets. The change stores estimated relative offsets so they
      can be used further.
      
      Reviewed By: nikic
      
      Differential Revision: https://reviews.llvm.org/D93529
      6e967834
  2. Mar 02, 2021