1. Dec 21, 2019
    • Evgenii Stepanov's avatar
      [msan] Check qsort input. · ddf897fc
      Evgenii Stepanov authored
      Summary:
      Qsort interceptor suppresses all checks by unpoisoning the data in the
      wrapper of a comparator function, and then unpoisoning the output array
      as well.
      
      This change adds an explicit run of the comparator on all elements of
      the input array to catch any sanitizer bugs.
      
      Reviewers: vitalybuka
      
      Subscribers: #sanitizers, llvm-commits
      
      Tags: #sanitizers, #llvm
      
      Differential Revision: https://reviews.llvm.org/D71780
      ddf897fc
    • Gabor Horvath's avatar
      59878ec8
    • LLVM GN Syncbot's avatar
      [gn build] Port 82923c71 · 226a0140
      LLVM GN Syncbot authored
      226a0140
    • Gabor Horvath's avatar
      [analyzer] Add Fuchsia Handle checker · 82923c71
      Gabor Horvath authored
      The checker can diagnose handle use after releases, double releases, and
      handle leaks.
      
      Differential Revision: https://reviews.llvm.org/D70470
      82923c71
    • Evgenii Stepanov's avatar
      [msan] Intercept qsort, qsort_r. · 07861e95
      Evgenii Stepanov authored
      Summary:
      This fixes qsort-related false positives with glibc-2.27.
      I'm not entirely sure why they did not show up with the earlier
      versions; the code seems similar enough.
      
      Reviewers: vitalybuka
      
      Subscribers: #sanitizers, llvm-commits
      
      Tags: #sanitizers, #llvm
      
      Differential Revision: https://reviews.llvm.org/D71740
      07861e95
    • Philip Reames's avatar
      More style cleanups following rG14fc20ca [NFC] · c148e2e2
      Philip Reames authored
      Demote member functions to static functions where possible
      Use early continue/early return to reduce nesting
      Clarify comments slightly.
      Reuse previously define expression in one case.
      c148e2e2
    • Sid Manning's avatar
      Avoid unsupported LLD options · d567b0ba
      Sid Manning authored
      Differential Revision: https://reviews.llvm.org/D70919
      d567b0ba
    • Philip Reames's avatar
      Fix a memory leak introduced w/the instruction padding support in rG14fc20ca · 4024d49e
      Philip Reames authored
      Should have caught this in review, but only noticed when addressing post commit style items.  We were creating a new instance of the X86MCInstrInfo class, and then never reclaiming the memory.  This wasn't even conditional on the new off by default flags, so it was an unconditional leak.
      4024d49e
    • Philip Reames's avatar
      Comment and adjust style in the newly introduced MCBoundaryAlignFragment... · 8b725f04
      Philip Reames authored
      Comment and adjust style in the newly introduced MCBoundaryAlignFragment infrastructure.  More to follow.
      8b725f04
    • Gabor Horvath's avatar
      [attributes][analyzer] Add annotations for handles. · fe17b30a
      Gabor Horvath authored
      These annotations will be used in an upcomming static analyzer check
      that finds handle leaks, use after releases, and double releases.
      
      Differential Revision: https://reviews.llvm.org/D70469
      fe17b30a
    • Kamlesh Kumar's avatar
    • Philip Reames's avatar
      Align branches within 32-Byte boundary (NOP padding) · 14fc20ca
      Philip Reames authored
      WARNING: If you're looking at this patch because you're looking for a full
      performace mitigation of the Intel JCC Erratum, this is not it!
      
      This is a preliminary patch on the patch towards mitigating the performance
      regressions caused by Intel's microcode update for Jump Conditional Code
      Erratum.  For context, see:
      https://www.intel.com/content/www/us/en/support/articles/000055650.html
      
      The patch adds the required assembler infrastructure and command line options
      needed to exercise the logic for INTERNAL TESTING.  These are NOT public flags,
      and should not be used for anything other than LLVM's own testing/debugging
      purposes.  They are likely to change both in spelling and meaning.
      
      WARNING: This patch is knowingly incorrect in some cornercases.  We need, and
      do not yet provide, a mechanism to selective enable/disable the padding.
      Conversation on this will continue in parellel with work on extending this
      infrastructure to support prefix padding.
      
      The goal here is to have the assembler align specific instructions such that
      they neither cross or end at a 32 byte boundary.  The impacted instructions are:
      a. Conditional jump.
      b. Fused conditional jump.
      c. Unconditional jump.
      d. Indirect jump.
      e. Ret.
      f. Call.
      
      The new options for llvm-mc are:
          -x86-align-branch-boundary=NUM aligns branches within NUM byte boundary.
          -x86-align-branch=TYPE[+TYPE...] specifies types of branches to align.
      
      A new MCFragment type, MCBoundaryAlignFragment, is added, which may emit
      NOP to align the fused/unfused branch.
      
      alignBranchesBegin inserts MCBoundaryAlignFragment before instructions,
      alignBranchesEnd marks the end of the branch to be aligned,
      relaxBoundaryAlign grows or shrinks sizes of NOP to align the target branch.
      
      Nop padding is disabled when the instruction may be rewritten by the linker,
      such as TLS Call.
      
      Process Note: I am landing a patch by skan as it has been LGTMed, and
      continuing to iterate on the review is simply slowing us down at this point.
      We can and will continue to iterate in tree.
      
      Patch By: skan
      Differential Revision: https://reviews.llvm.org/D70157
      14fc20ca
    • Dan Liew's avatar
      [NFC][Driver] Add dummy compiler-rt sanitizer dylibs for Darwin. · 03512b26
      Dan Liew authored
      This adds dummy files to the test resource directory used by the Clang
      driver tests.
      
      rdar://problem/58118584
      03512b26
    • Fangrui Song's avatar
      [PPC32] Emit R_PPC_PLTREL24 for calls to dso_local ifunc · e8054f09
      Fangrui Song authored
        static void *ifunc(void) __attribute__((ifunc("resolver")));
        void foo() { ifunc(); }
      
      The relocation produced by the ifunc() call:
      
      1. gcc -msecure-plt -fPIC => R_PPC_PLTREL24 r_addend=0x8000
      2. gcc -msecure-plt -PIE => R_PPC_PLTREL24 r_addend=0x8000
      3. clang -msecure-plt -fPIC => R_PPC_PLTREL24 r_addend=0x8000
      4. clang -msecure-plt -fPIE => R_PPC_REL24
      
      4 is incorrect. The R_PPC_REL24 needs a call stub due to ifunc. If this
      relocation is mixed with other R_PPC_PLTREL24(r_addend=0x8000) in a
      function, both GNU ld and lld (after D71621 fix) may produce a wrong
      result.
      
      This patch fixes 4 to use R_PPC_PLTREL24, which matches GCC.
      Both GNU ld and lld (after D71621) will be happy.
      
      Reviewed By: sfertile
      
      Differential Revision: https://reviews.llvm.org/D71649
      e8054f09
    • Craig Topper's avatar
      [X86] Fix a KNL miscompile caused by combineSetCC swapping LHS/RHS variables before a later use. · de2378b4
      Craig Topper authored
      The setcc operands are copied into LHS and RHS variables at the top of the function. We also capture the condition code.
      
      A later piece of code swaps the operands and changing the CC variable as part of a canonicalization to make some other checks simpler. But we might not make the transform we canonicalized for. So we continue on through the function where we can use the swapped LHS/RHS variables and access the original condition code operand instead of the modified CC variable. This leads to a setcc being created with the original condition code, but with swapped operands.
      
      To mitigate this, this patch does a couple things. The LHS/RHS/CC variables are made const to keep them from being modified like this again. The transform that needs the swap now uses temporary copies of the variables. And the transform that used the original condition code operand has been altered to use the CC variable we cached originally. Either of these changes are enough to fix the issue, but doing both to make this code very safe.
      
      I also considered rewriting the swap code in some way to check both permutations without explicitly swapping or needing temporary variables, but held off on that.
      
      Differential Revision: https://reviews.llvm.org/D71736
      de2378b4
    • Jonas Devlieghere's avatar
      [lldb/Lua] Implement a Simple Lua Script Interpreter Prototype · 28613242
      Jonas Devlieghere authored
      This implements a very elementary Lua script interpreter. It supports
      running a single command as well as running interactively. It uses
      editline if available. It's still missing a bunch of stuff though. Some
      things that I intentionally ingored for now are that I/O isn't properly
      hooked up (so every print goes to stdout) and the non-editline support
      which is not handling a bunch of corner cases. The latter is a matter of
      reusing existing code in the Python interpreter.
      
      Discussion on the mailing list:
      http://lists.llvm.org/pipermail/lldb-dev/2019-December/015812.html
      
      Differential revision: https://reviews.llvm.org/D71234
      28613242
    • Jim Ingham's avatar
      In 'thread step-out' command, only insert a breakpoint in executable memory. · 2a42a5a2
      Jim Ingham authored
      Previously, if the current function had a nonstandard stack layout/ABI, and had a valid
      data pointer in the location where the return address is usually located, data corruption
      would occur when the breakpoint was written. This could lead to an incorrectly reported
      crash or silent corruption of the program's state. Now, if the above check fails, the command safely aborts.
      
      Differential Revision: https://reviews.llvm.org/D71372
      2a42a5a2
    • Pierre Habouzit's avatar
      [objc_direct] Tigthen checks for direct methods · 42f9d0c0
      Pierre Habouzit authored
      Because the name of a direct method must be agreed upon by the caller
      and the implementation, certain bad practices that one can get away with
      when using dynamism are fatal with direct methods.
      
      To avoid really weird and unscruttable linker error, tighten the
      front-end error reporting.
      
      Rule 1:
        Direct methods can only have at most one declaration in an @interface
        container. Any redeclaration is strictly forbidden.
      
        Today some amount of redeclaration is tolerated between the main
        interface and categories for dynamic methods, but we can't have that.
      
      Rule 2:
        Direct method implementations can only be declared in a matching
        @interface container: when implemented in the primary @implementation
        then the declaration must be in the primary @interface or an
        extension, and when implemented in a category, the declaration must be
        in the @interface for the same category.
      
      Also fix another issue with ObjCMethod::getCanonicalDecl(): when an
      implementation lives in the primary @interface, then its canonical
      declaration can be in any extension, even when it's not an accessor.
      
      Add Sema tests to cover the new errors, and CG tests to beef up testing
      around function names for categories and extensions.
      
      Radar-Id: <rdar://problem/58054563>
      
      Differential Revision: https://reviews.llvm.org/D71694
      42f9d0c0
    • Jim Ingham's avatar
      ThreadPlanTracer::TracingStarted can't call virtual methods on Thread. · 810c3cfa
      Jim Ingham authored
          TracingStarted gets called in the Thread constructor, which means you can't
          call a virtual method of the class.  So delay setting up the m_register_values
          till you need them.  NFC as lldb just crashes if you don't do this.
      
          The thread tracing is an only occasionally useful feature, and it only sort
          of works.  I'm not adding tests etc. at this point, I'm just poking at it a
          bit.  If I get it working better I'll write tests and so forth.
      810c3cfa
    • Danilo Carvalho Grael's avatar
      [AArch64][SVE] Replace integer immediate intrinsics with splat vector variant · 15bfd2cd
      Danilo Carvalho Grael authored
      Summary: Replace the integer immediate intrisics with splat vector variants so they can be applied as optimizations for the C/C++ intrinsics.
      
      Reviewers: sdesmalen, huntergr, rengolin, efriedma, c-rhodes, mgudim, kmclaughlin
      
      Subscribers: tschuett, kristof.beyls, hiraditya, rkruppe, psnobl, llvm-commits, amehsan
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D71614
      15bfd2cd
    • Jonas Paulsson's avatar
      [SystemZ] Add a mapping from "select register" to "load on condition" (2-addr). · 9fcebad5
      Jonas Paulsson authored
      The SELR(Mux) instructions can be converted to two-address form as LOCR(Mux)
      instructions whenever one of the sources are the same reg as dest. By adding
      this mapping in getTwoOperandOpcode(), we get:
      
      - Two-address hints in getRegAllocationHints() for select register
        instructions.
      
      - No need anymore for special handling in SystemZShortenInst.cpp -
        shortenSelect() removed.
      
      The two-address hints are now added before the GRX32 hints, which should be
      preferred.
      
      Review: Ulrich Weigand
      https://reviews.llvm.org/D68870
      9fcebad5
    • Raphael Isemann's avatar
      [lldb][NFC] Remove utility methods in TestClangASTImporter · a805e0fb
      Raphael Isemann authored
      We have a central header for all these methods so we can
      just use those for creating ClangASTContexts.
      a805e0fb
    • Evgenii Stepanov's avatar
      llvm-symbolizer: support DW_FORM_loclistx locations. · b538a2aa
      Evgenii Stepanov authored
      Summary:
      With -gdwarf-5 local variable locations are emitted as DW_FORM_loclistx
      form instead of the regular DW_FORM_sec_offset. Teach
      DWARFDie::getLocations to understand the new format and use it in
      llvm-symbolizer "FRAME" command.
      
      Reviewers: pcc, jdoerfert
      
      Subscribers: srhines, aprantl, hiraditya, rupprecht, llvm-commits
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D70756
      b538a2aa
    • Jordan Rupprecht's avatar
      Temporarily revert "Reapply [LVI] Normalize pointer behavior" and "[LVI] Restructure caching" · 02a6b0bc
      Jordan Rupprecht authored
      This reverts commits 7e18aeba (D70376) 21fbd558 (D69914) due to increased memory usage.
      02a6b0bc
    • Jonas Paulsson's avatar
      [SystemZ] Bugfix and improve the handling of CC values. · 3174683e
      Jonas Paulsson authored
      It was recently discovered that the handling of CC values was actually broken
      since overflow was not properly handled ('nsw' flag not checked for).
      
      Add and sub instructions now have a new target specific instruction flag
      named SystemZII::CCIfNoSignedWrap. It means that the CC result can be used
      instead of a compare with 0, but only if the instruction has the 'nsw' flag
      set.
      
      This patch also adds the improvements of conversion to logical instructions
      and the analyzing of add with immediates, to be able to eliminate more
      compares.
      
      Review: Ulrich Weigand
      https://reviews.llvm.org/D66868
      3174683e
    • Victor Campos's avatar
      Revert "[ARM] Improve codegen of volatile load/store of i64" · 2ff5a596
      Victor Campos authored
      This reverts commit bbcf1c34.
      2ff5a596
    • Raphael Isemann's avatar
      [lldb][NFC] Remove redundant ASTContext args to CopyDecl/DeportDecl · 6be76f49
      Raphael Isemann authored
      We already pass a Decl here and the additional ASTContext needs to
      match the Decl. We might as well just pass the Decl and then extract
      the ASTContext from that.
      6be76f49
    • mydeveloperday's avatar
      [clang-format] C# formatting a class with inheritance followed by an attribute... · 2f209ccf
      mydeveloperday authored
      [clang-format] C# formatting a class with inheritance followed by an attribute specifier assume its a braces initializer
      
      Summary:
      https://bugs.llvm.org/show_bug.cgi?id=44340
      
      The rule that prevents `... {} [[....]]`  being treated as a braced initializer for C++ causes problems for C# with attributes, causing it to be incorrectly classified and then messing up the subsequent formatting. (see bug for details of formatting)
      
      Reviewers: mitchell-stellar, klimek, sammccall
      
      Reviewed By: mitchell-stellar
      
      Subscribers: cfe-commits
      
      Tags: #clang-format, #clang
      
      Differential Revision: https://reviews.llvm.org/D71769
      2f209ccf
    • Michał Górny's avatar
      [compiler-rt] [test] Disable MPROTECT on two builtin tests · 190b9110
      Michał Górny authored
      Introduce a new %run_nomprotect substitution to run tests that do not
      work with MPROTECT enabled.  This uses paxctl via a wrapper on NetBSD,
      and evaluates to plain %run on other systems.
      
      Differential Revision: https://reviews.llvm.org/D71513
      190b9110
    • Michał Górny's avatar
      [libc++] Update feature list for NetBSD · e1882af9
      Michał Górny authored
      Add NetBSD to the same feature list as Fuchsia since it matches
      in available features, effectively enabling aligned_alloc(),
      timespec_get() and C11 features.  Remove now-duplicate declaration
      of quick_exit() support.
      
      Differential Revision: https://reviews.llvm.org/D71511
      e1882af9
    • Alexey Bataev's avatar
      ff92c56e
  2. Dec 20, 2019