summaryrefslogtreecommitdiff
path: root/llvm/lib/Support/GlobPattern.cpp
AgeCommit message (Collapse)Author
2023-09-12[GlobPattern] Fix build error on gcc7.5Ellis Hoag
This fixes a build error introduced by https://reviews.llvm.org/D153587 when using an old version of GCC. See https://reviews.llvm.org/D153587#4644735 for details.
2023-08-30[GlobPattern] Fix build errorEllis Hoag
This fixes a build error introduced by https://reviews.llvm.org/D153587
2023-08-30[GlobPattern] Support brace expansionsEllis Hoag
Extend `GlobPattern` to support brace expansions, e.g., `foo.{c,cpp}` as discussed in https://reviews.llvm.org/D152762#4425203. The high level change was to turn `Tokens` into a list that gets larger when we see a new brace expansion term. Then in `GlobPattern::match()` we must check against each token group. This is a breaking change since `{` will no longer match a literal without escaping. However, `\{` will match the literal `{` before and after this change. Also, from a brief survey of LLVM, it seems that `GlobPattern` is mostly used for symbol and path matching, which likely won't need `{` in their patterns. See https://github.com/devongovett/glob-match#syntax for a nice glob reference. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D153587
2023-08-08[GlobPattern] Update invalid glob pattern diagnostic for unmatched '['Fangrui Song
Update this diagnostic to mention the reason (unmatched '['), matching the other diagnostic about stray '\'. The original pattern is omitted, as some users may mention the original pattern in another position, not repeating it.
2023-07-25[Support] Rewrite GlobPatternFangrui Song
The current implementation has two primary issues: * Matching `a*a*a*b` against `aaaaaa` has exponential complexity. * BitVector harms data cache and is inefficient for literal matching. and a minor issue that `\` at the end may cause an out of bounds access in `StringRef::operator[]`. Switch to an O(|S|*|P|) greedy algorithm instead: factor the pattern into segments split by '*'. The segment is matched sequentianlly by finding the first occurrence past the end of the previous match. This algorithm is used by lots of fnmatch implementations, including musl and NetBSD's. In addition, `optional<StringRef> Exact, Suffix, Prefix` wastes space. Instead, match the non-metacharacter prefix against the haystack, then match the pattern with the rest. In practice `*suffix` style patterns are less common and our new algorithm is fast enough, so don't bother storing the non-metacharacter suffix. Note: brace expansions (D153587) can leverage the `matchOne` function. Differential Revision: https://reviews.llvm.org/D156046
2022-12-05Remove unused #include "llvm/ADT/Optional.h"Fangrui Song
2022-08-08[llvm] LLVM_FALLTHROUGH => [[fallthrough]]. NFCFangrui Song
With C++17 there is no Clang pedantic warning or MSVC C5051.
2020-05-17Revert rGca18ce1a00cd8b7cb7ce0e130440f5ae1ffe86ee "GlobPattern.h - remove ↵Simon Pilgrim
unnecessary BitVector.h/StringRef.h includes. NFC" Causes lld build errors
2020-05-17GlobPattern.h - remove unnecessary BitVector.h/StringRef.h includes. NFCSimon Pilgrim
Use forward declarations (BitVector already had one) and an headers to source file that were implicitly using them.
2019-10-17Reapply r375051: [support] GlobPattern: add support for `\` and `[!...]`, ↵Jordan Rupprecht
and allow `]` in more places Reland r375051 (reverted in r375052) after fixing lld tests on Windows in r375126 and r375131. Original description: Update GlobPattern in libSupport to handle a few more cases. It does not fully match the `fnmatch` used by GNU objcopy since named character classes (e.g. `[[:digit:]]`) are not supported, but this should support most existing use cases (mostly just `*` is what's used anyway). This will be used to implement the `--wildcard` flag in llvm-objcopy to be more compatible with GNU objcopy. This is split off of D66613 to land the libSupport changes separately. The llvm-objcopy part will land soon. Reviewers: jhenderson, MaskRay, evgeny777, espindola, alexshap Reviewed By: MaskRay Subscribers: nickdesaulniers, emaste, arichardson, hiraditya, jakehehrlich, abrachet, seiya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66613 llvm-svn: 375149
2019-10-16Revert [support] GlobPattern: add support for `\` and `[!...]`, and allow ↵Jordan Rupprecht
`]` in more places This reverts r375051 (git commit a409afaad64ce83ea44cc30ee5f96b6e613a6e98) The patch does not work on Windows due to `\` in filenames being interpreted as escaping rather than literal path separators when used by lld linker scripts. llvm-svn: 375052
2019-10-16[support] GlobPattern: add support for `\` and `[!...]`, and allow `]` in ↵Jordan Rupprecht
more places Summary: Update GlobPattern in libSupport to handle a few more cases. It does not fully match the `fnmatch` used by GNU objcopy since named character classes (e.g. `[[:digit:]]`) are not supported, but this should support most existing use cases (mostly just `*` is what's used anyway). This will be used to implement the `--wildcard` flag in llvm-objcopy to be more compatible with GNU objcopy. This is split off of D66613 to land the libSupport changes separately. The llvm-objcopy part will land soon. Reviewers: jhenderson, MaskRay, evgeny777, espindola, alexshap Reviewed By: MaskRay Subscribers: nickdesaulniers, emaste, arichardson, hiraditya, jakehehrlich, abrachet, seiya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66613 undo objcopy changes to make this libsupport only llvm-svn: 375051
2019-01-19Update the file headers across all of the LLVM projects in the monorepoChandler Carruth
to reflect the new license. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351636
2017-07-31[Support/GlobPattern] - Do not crash when pattern has characters with int ↵George Rimar
value < 0. Found it during work on LLD, it would crash on following linker script: SECTIONS { .foo : { *("*®") } } That happens because ® has int value -82. And chars are used as array index in code, and are signed by default. Differential revision: https://reviews.llvm.org/D35891 llvm-svn: 309549
2016-12-20Move GlobPattern class from LLD to llvm/Support.Rui Ueyama
GlobPattern is a class to handle glob pattern matching. Currently only LLD is using that, but technically that feature is not specific to linkers, so in this patch I move that file to LLVM. Differential Revision: https://reviews.llvm.org/D27969 llvm-svn: 290212