aboutsummaryrefslogtreecommitdiff
path: root/clang/unittests
AgeCommit message (Collapse)AuthorFilesLines
4 days[clang-format] Skip block commented out includes when sorting them (#97787)Owen Pan1-0/+9
Fixes #97539.
5 days[clang] Avoid 'raw_string_ostream::str' (NFC)Youngsuk Kim2-3/+3
Since `raw_string_ostream` doesn't own the string buffer, it is desirable (in terms of memory safety) for users to directly reference the string buffer rather than use `raw_string_ostream::str()`. Work towards TODO item to remove `raw_string_ostream::str()`.
7 days[clang-repl] Fix RuntimeInterfaceBuilder for 32-bit systems (#97071)Stefan Gränitz1-4/+0
When generating runtime interface bindings, extend integral types to the native register size rather than 64-bit per se Fixes #94994
7 daysRevert "[Clang][Comments] Attach comments to decl even if preproc directives ↵Aaron Ballman1-310/+0
are in between (#88367)" This reverts commit 9f04d75b2bd8ba83863db74ebe1a5c08cfc5815c. There was post-commit feedback on the direction this PR took.
8 days[clang-format] Add SpacesInParensOption for filtering repeated parens (#77522)Gedare Bloom2-8/+122
The __attribute((specifier-list)) currently is formatted based on the SpacesInParensOptions.Other (previously, SpacesInParentheses). This change allows finer control over addition of spaces between the consecutive parens, and between the inner parens and the list of attribute specifiers. Differential Revision: https://reviews.llvm.org/D155529 This is migrated from Phabricator, see more discussion there. --------- Co-authored-by: Owen Pan <owenpiano@gmail.com>
8 days[clang] Disable C++14 sized deallocation by default for MinGW targets (#97232)Martin Storsjö1-2/+2
This reverts 130e93cc26ca9d3ac50ec5a92e3109577ca2e702 for the MinGW target. This avoids the issue that is discussed in https://github.com/llvm/llvm-project/issues/96899 (and which is summarized in the code comment). This is intended as a temporary workaround until the issue is handled better within libc++.
8 days[clang] Default to -fno-sized-deallocation for AIX (#97076)Xing Xue1-0/+5
Some `libc++` LIT test cases and user code define their own version of `operator delete` that are not sized. With `-fno-sized-deallocation`, destructors call the non-sized `operator delete` and it will be resolved to the user defined version. However, with `-fsized-deallocation`, destructors will call the sized `operator delete` which will be resolved to the weak definition in `libc++abi` because the user code does not define the corresponding sized version. The `libc++abi` sized `operator delete` in turn calls the non-sized version of `operator delete` of the same shared object inside `libc++abi` instead of the user defined version on AIX because runtime linking is not the default for AIX and therefore, fails the tests or user code. This patch sets `-fno-sized-deallocation` as the default for AIX if neither `-fsize-deallocation` nor `-fno-sized-deallocation` is explicitly set, similar to what is done for ZOS.
9 daysReland "[analyzer] Harden safeguards for Z3 query times" (#97298)Balazs Benics1-16/+100
This is exactly as originally landed in #95129, but now the minimal Z3 version was increased to meet this change in #96682. https://discourse.llvm.org/t/bump-minimal-z3-requirements-from-4-7-1-to-4-8-9/79664/4 --- This patch is a functional change. https://discourse.llvm.org/t/analyzer-rfc-taming-z3-query-times/79520 As a result of this patch, individual Z3 queries in refutation will be bound by 300ms. Every report equivalence class will be processed in at most 1 second. The heuristic should have only really marginal observable impact - except for the cases when we had big report eqclasses with long-running (15s) Z3 queries, where previously CSA effectively halted. After this patch, CSA will tackle such extreme cases as well. (cherry picked from commit eacc3b3504be061f7334410dd0eb599688ba103a)
9 daysReland "[analyzer][NFC] Reorganize Z3 report refutation" (#97265)Balazs Benics2-0/+60
This is exactly as originally landed in #95128, but now the minimal Z3 version was increased to meet this change in #96682. https://discourse.llvm.org/t/bump-minimal-z3-requirements-from-4-7-1-to-4-8-9/79664/4 --- This change keeps existing behavior, namely that if we hit a Z3 timeout we will accept the report as "satisfiable". This prepares for the commit "Harden safeguards for Z3 query times". https://discourse.llvm.org/t/analyzer-rfc-taming-z3-query-times/79520 (cherry picked from commit 89c26f6c7b0a6dfa257ec090fcf5b6e6e0c89aab)
9 days[clang][ThreadSafety] Revert stricter typing on trylock attributes (#97293)Dan McArdle1-3/+3
This PR reverts #95290 and the one-liner followup PR #96494. I received some substantial feedback on #95290, which I plan to address in a future PR. I've also received feedback that because the change emits errors where they were not emitted before, we should at least have a flag to disable the stricter warnings.
9 days[Clang][Comments] Attach comments to decl even if preproc directives are in ↵hdoc1-0/+310
between (#88367) ### Background It's surprisingly common for C++ code in the wild to conditionally show/hide declarations to Doxygen through the use of preprocessor directives. One especially common version of this pattern is demonstrated below: ```cpp /// @brief Test comment #ifdef DOXYGEN_BUILD_ENABLED template<typename T> #else template <typename T> typename std::enable_if<std::is_integral<T>::value>::type #endif void f() {} ``` There are more examples I've collected below to demonstrate usage of this pattern: - Example 1: [Magnum](https://github.com/mosra/magnum/blob/8538610fa27e1db37070eaabe34f1e4e41648bab/src/Magnum/Resource.h#L117-L127) - Example 2: [libcds](https://github.com/khizmax/libcds/blob/9985d2a87feaa3e92532e28f4ab762a82855a49c/cds/container/michael_list_nogc.h#L36-L54) - Example 3: [rocPRIM](https://github.com/ROCm/rocPRIM/blob/609ae19565ff6a3499168b76a0be5652762e24f6/rocprim/include/rocprim/block/detail/block_reduce_raking_reduce.hpp#L60-L65) From my research, it seems like the most common rationale for this functionality is hiding difficult-to-parse code from Doxygen, especially where template metaprogramming is concerned. Currently, Clang does not support attaching comments to decls if there are preprocessor comments between the comment and the decl. This is enforced here: https://github.com/llvm/llvm-project/blob/b6ebea7972cd05a8e4dcf0d5a54f2c793999995a/clang/lib/AST/ASTContext.cpp#L284-L287 Alongside preprocessor directives, any instance of `;{}#@` between a comment and decl will cause the comment to not be attached to the decl. #### Rationale It would be nice for Clang-based documentation tools, such as [hdoc](https://hdoc.io), to support code using this pattern. Users expect to see comments attached to the relevant decl — even if there is an `#ifdef` in the way — which Clang does not currently do. #### History Originally, commas were also in the list of "banned" characters, but were removed in `b534d3a0ef69` ([link](https://github.com/llvm/llvm-project/commit/b534d3a0ef6970f5e42f10ba5cfcb562d8b184e1)) because availability macros often have commas in them. From my reading of the code, it appears that the original intent of the code was to exclude macros and decorators between comments and decls, possibly in an attempt to properly attribute comments to macros (discussed further in "Complications", below). There's some more discussion here: https://reviews.llvm.org/D125061. ### Change This modifies Clang comment parsing so that comments are attached to subsequent declarations even if there are preprocessor directives between the end of the comment and the start of the decl. Furthermore, this change: - Adds tests to verify that comments are attached to their associated decls even if there are preprocessor directives in between - Adds tests to verify that current behavior has not changed (i.e. use of the other characters between comment and decl will result in the comment not being attached to the decl) - Updates existing `lit` tests which would otherwise break. #### Complications Clang [does not yet support](https://github.com/llvm/llvm-project/issues/38206) attaching doc comments to macros. Consequently, the change proposed in this RFC affects cases where a doc comment attached to a macro is followed immediately by a normal declaration. In these cases, the macro's doc comments will be attached to the subsequent decl. Previously they would be ignored because any preprocessor directives between a comment and a decl would result in the comment not being attached to the decl. An example of this is shown below. ```cpp /// Doc comment for a function-like macro /// @param n /// A macro argument #define custom_sqrt(n) __internal_sqrt(n) int __internal_sqrt(int n) { return __builtin_sqrt(n); } // NB: the doc comment for the custom_sqrt macro will actually be attached to __internal_sqrt! ``` There is a real instance of this problem in the Clang codebase, namely here: https://github.com/llvm/llvm-project/blob/be10070f91b86a6f126d2451852242bfcb2cd366/clang/lib/Headers/amxcomplexintrin.h#L65-L114 As part of this RFC, I've added a semicolon to break up the Clang comment parsing so that the `-Wdocumentation` errors go away, but this is a hack. The real solution is to fix Clang comment parsing so that doc comments are properly attached to macros, however this would be a large change that is outside of the scope of this RFC.
10 days[clang] Avoid 'raw_string_ostream::str' (NFC)Youngsuk Kim4-13/+13
Since `raw_string_ostream` doesn't own the string buffer, it is desirable (in terms of memory safety) for users to directly reference the string buffer rather than use `raw_string_ostream::str()`. Work towards TODO comment to remove `raw_string_ostream::str()`.
10 days[clang-format] Add option to remove leading blank lines (#91221)sstwcw2-5/+18
The options regarding which blank lines are kept are also aggregated. The new option is `KeepEmptyLines`. This patch was initially part of 9267f8f19a2e502e. I neglected to check the server builds before I added it. It broke clangd. Jie Fu fixed the problem in 4c91b49bab0728d4. I was unaware of it. I thought the main branch was still broken. I reverted the first patch in 70cfece24d6cbb57. It broke his fix. He reverted it in c69ea04fb9738db2. Now the feature is added again including the fix.
11 days[clang-format] Allow ternary in all templates (#96801)Emilia Kond1-0/+18
Currently, question mark and colon tokens are not allowed between angle brackets, as a template argument, if we are in an expression context. However, expressions can still allowed in non-expression contexts, leading to inconsistent formatting. Removing this check entirely fixes this issue, and, surprisingly, breaks no tests. Fixes https://github.com/llvm/llvm-project/issues/81385
13 days[clang][transformer] Introduce a `constructExprArgs` range selector. (#95901)Clement Courbet1-0/+42
This is similar to `callArgs` but for construct exprs like `S(42)` or `{42}`.
14 daysRevert "[clang][dataflow] Teach `AnalysisASTVisitor` that `typeid()` can be ↵martinboehme1-43/+0
evaluated." (#96766) Reverts llvm/llvm-project#96731 It causes CI failures.
14 days[clang][nullability] Improve modeling of `++`/`--` operators. (#96601)martinboehme1-8/+23
We definitely know that these operations change the value of their operand, so clear out any value associated with it. We don't create a new value, instead leaving it to the analysis to do this if desired.
14 days[clang][dataflow] Teach `AnalysisASTVisitor` that `typeid()` can be ↵martinboehme1-0/+43
evaluated. (#96731) We were previously treating the operand of `typeid()` as being definitely unevaluated, but it can be evaluated if it is a glvalue of polymorphic type. This patch includes a test that fails without the fix.
2024-06-25Revert "[clang-format] Add option to remove leading blank lines (#91221)"sstwcw2-18/+5
This reverts commit 9267f8f19a2e502ef5a216c0d52b352b3699d399. I changed a formatter option. I forgot to update other components that depend on the formatter when the option name changed.
2024-06-25[clang-format] Add option to remove leading blank lines (#91221)sstwcw2-5/+18
The options regarding which blank lines are kept are also aggregated. The new option is `KeepEmptyLines`.
2024-06-24[clang][ThreadSafety] Check trylock function success and return types (#95290)Dan McArdle1-3/+3
With this change, Clang will generate errors when trylock functions have improper return types. Today, it silently fails to apply the trylock attribute to these functions which may incorrectly lead users to believe they have correctly acquired locks before accessing guarded data. As a side effect of explicitly checking the success argument type, I seem to have fixed a false negative in the analysis that could occur when a trylock's success argument is an enumerator. I've added a regression test to warn-thread-safety-analysis.cpp named `TrylockSuccessEnumFalseNegative`. This change also improves the documentation with descriptions of of the subtle gotchas that arise from the analysis interpreting the success arg as a boolean. Issue #92408
2024-06-22[clang-format] Don't count template template parameter as declaration (#96396)Emilia Kond1-0/+17
Reapply 4a7bf42a9b83144db8a11ac06cce4da21166e6a2 which was reverted in 34d44eb41dfbbbf01712719558b02763334fbeb3 Not sure why there are tests elsewhere in clang that rely on the output of clang-format, but they were wrong
2024-06-22Revert "[clang-format] Don't count template template parameter as ↵Mehdi Amini1-17/+0
declaration" (#96388) Reverts llvm/llvm-project#95025 ; many bots are broken
2024-06-22[clang-format] Don't count template template parameter as declaration (#95025)Emilia Kond1-0/+17
In ContinuationIndenter::mustBreak, a break is required between a template declaration and the function/class declaration it applies to, if the template declaration spans multiple lines. However, this also includes template template parameters, which can cause extra erroneous line breaks in some declarations. This patch makes template template parameters not be counted as template declarations. Fixes https://github.com/llvm/llvm-project/issues/93793 Fixes https://github.com/llvm/llvm-project/issues/48746
2024-06-21[clang-format] Annotate r_paren before braced list as TT_CastRParen (#96271)Owen Pan1-0/+4
Fixes #96096.
2024-06-21[VFS] Avoid <stack> include (NFC)Nikita Popov1-0/+1
Directly use a vector instead of wrapping it in a stack, like we do in most places.
2024-06-21[clang][dataflow] Add a callback run on the pre-transfer state. (#96140)martinboehme2-41/+72
At the same time, rename `PostVisitCFG` to the more descriptive `PostAnalysisCallbacks` (which emphasizes the fact that these callbacks are run after the dataflow analysis itself has converged). Before this patch, it was only possible to run a callback on the state _after_ the transfer function had been applied, but for many analyses, it's more natural to to check the state _before_ the transfer function has been applied, because we are usually checking the preconditions for some operation. Some checks are impossible to perform on the "after" state because we can no longer check the precondition; for example, the `++` / `--` operators on raw pointers require the operand to be nonnull, but after the transfer function for the operator has been applied, the original value of the pointer can no longer be accessed. `UncheckedOptionalAccessModelTest` has been modified to run the diagnosis callback on the "before" state. In this particular case, diagnosis can be run unchanged on either the "before" or "after" state, but we want this test to demonstrate that running diagnosis on the "before" state is usually the preferred approach. This change is backwards-compatible; all existing analyses will continue to run the callback on the "after" state.
2024-06-20[Clang] [Sema] Diagnose unknown std::initializer_list layout in SemaInit ↵Mital Ashok3-3/+4
(#95580) This checks if the layout of `std::initializer_list` is something Clang can handle much earlier and deduplicates the checks in CodeGen/CGExprAgg.cpp and AST/ExprConstant.cpp Also now diagnose `union initializer_list` (Fixes #95495), bit-field for the size (Fixes a crash that would happen during codegen if it were unnamed), base classes (that wouldn't be initialized) and polymorphic classes (whose vtable pointer wouldn't be initialized).
2024-06-20[Clang][Comments] Support for parsing headers in Doxygen \par commands (#91100)hdoc1-0/+137
### Background Doxygen's `\par` command ([link](https://www.doxygen.nl/manual/commands.html#cmdpar)) has an optional argument, which denotes the header of the paragraph started by a given `\par` command. In short, the paragraph command can be used with a heading, or without one. The code block below shows both forms and how the current version of LLVM/Clang parses this code: ``` $ cat test.cpp /// \par User defined paragraph: /// Contents of the paragraph. /// /// \par /// New paragraph under the same heading. /// /// \par /// A second paragraph. class A {}; $ clang++ -cc1 -ast-dump -fcolor-diagnostics -std=c++20 test.cpp `-CXXRecordDecl 0x1530f3a78 <test.cpp:11:1, col:10> col:7 class A definition |-FullComment 0x1530fea38 <line:2:4, line:9:23> | |-ParagraphComment 0x1530fe7e0 <line:2:4> | | `-TextComment 0x1530fe7b8 <col:4> Text=" " | |-BlockCommandComment 0x1530fe800 <col:5, line:3:30> Name="par" | | `-ParagraphComment 0x1530fe878 <line:2:9, line:3:30> | | |-TextComment 0x1530fe828 <line:2:9, col:32> Text=" User defined paragraph:" | | `-TextComment 0x1530fe848 <line:3:4, col:30> Text=" Contents of the paragraph." | |-ParagraphComment 0x1530fe8c0 <line:5:4> | | `-TextComment 0x1530fe898 <col:4> Text=" " | |-BlockCommandComment 0x1530fe8e0 <col:5, line:6:41> Name="par" | | `-ParagraphComment 0x1530fe930 <col:4, col:41> | | `-TextComment 0x1530fe908 <col:4, col:41> Text=" New paragraph under the same heading." | |-ParagraphComment 0x1530fe978 <line:8:4> | | `-TextComment 0x1530fe950 <col:4> Text=" " | `-BlockCommandComment 0x1530fe998 <col:5, line:9:23> Name="par" | `-ParagraphComment 0x1530fe9e8 <col:4, col:23> | `-TextComment 0x1530fe9c0 <col:4, col:23> Text=" A second paragraph." `-CXXRecordDecl 0x1530f3bb0 <line:11:1, col:7> col:7 implicit class A ``` As we can see above, the optional paragraph heading (`"User defined paragraph"`) is not an argument of the `\par` `BlockCommandComment`, but instead a child `TextComment`. For documentation generators like [hdoc](https://hdoc.io/), it would be ideal if we could parse Doxygen documentation comments with these semantics in mind. Currently that's not possible. ### Change This change parses `\par` command according to how Doxygen parses them, making an optional header available as a an argument if it is present. In addition: - AST unit tests are defined to test this functionality when an argument is present, isn't present, with additional spacing, etc. - TableGen is updated with an `IsParCommand` to support this functionality - `lit` tests are updated where needed
2024-06-19[clang-format] Correctly annotate l_brace after TypenameMacro (#96026)Owen Pan2-0/+15
Closes #95418.
2024-06-18[clang-format] Handle function try block with ctor-initializer (#95878)Owen Pan1-0/+16
Fixes #58987. Fixes #95679.
2024-06-18[NFC]Fix memory leak in HeaderSearchTest (#95927)Danial Klimkin1-2/+4
AddressSanitizer: 56 byte(s) leaked in 1 allocation(s). (clang/unittests:lex_tests)
2024-06-18[analyzer] Revert Z3 changes (#95916)Balazs Benics2-144/+0
Requested in: https://github.com/llvm/llvm-project/pull/95128#issuecomment-2176008007 Revert "[analyzer] Harden safeguards for Z3 query times" Revert "[analyzer][NFC] Reorganize Z3 report refutation" This reverts commit eacc3b3504be061f7334410dd0eb599688ba103a. This reverts commit 89c26f6c7b0a6dfa257ec090fcf5b6e6e0c89aab.
2024-06-18[analyzer] Harden safeguards for Z3 query timesBalazs Benics1-16/+100
This patch is a functional change. https://discourse.llvm.org/t/analyzer-rfc-taming-z3-query-times/79520 As a result of this patch, individual Z3 queries in refutation will be bound by 300ms. Every report equivalence class will be processed in at most 1 second. The heuristic should have only really marginal observable impact - except for the cases when we had big report eqclasses with long-running (15s) Z3 queries, where previously CSA effectively halted. After this patch, CSA will tackle such extreme cases as well. Reviewers: NagyDonat, haoNoQ, Xazax-hun, Szelethus, mikhailramalho Reviewed By: NagyDonat Pull Request: https://github.com/llvm/llvm-project/pull/95129
2024-06-18[analyzer][NFC] Reorganize Z3 report refutationBalazs Benics2-0/+60
This change keeps existing behavior, namely that if we hit a Z3 timeout we will accept the report as "satisfiable". This prepares for the commit "Harden safeguards for Z3 query times". https://discourse.llvm.org/t/analyzer-rfc-taming-z3-query-times/79520 Reviewers: NagyDonat, haoNoQ, Xazax-hun, mikhailramalho, Szelethus Reviewed By: NagyDonat Pull Request: https://github.com/llvm/llvm-project/pull/95128
2024-06-17[clang-format] Handle Verilog delay control (#95703)sstwcw1-0/+9
I made a mistake when I tried to make the code handle the backtick character like the hash character. The code did not recognize the delay control structure. It caused net names in the declaration to be aligned to the type name instead of the first net name. new ```Verilog wire logic #0 mynet, // mynet1; ``` old ```Verilog wire logic #0 mynet, // mynet1; ```
2024-06-16[clang-format][NFC] Suppress diagnostic noise in GetStyleOfFile testOwen Pan1-5/+8
2024-06-16[clang-format] Add DiagHandler parameter to format::getStyle() (#91317)pointhex1-0/+21
It allows to control of error output for the function. Closes #94205. --------- Co-authored-by: Owen Pan <owenpiano@gmail.com>
2024-06-16[clang-format] Handle AttributeMacro before access modifiers (#95634)Owen Pan1-0/+15
Closes #95094.
2024-06-15[clang][modules] HeaderSearch::MarkFileModuleHeader sets textual headers' ↵Ian Anderson1-0/+68
HeaderFileInfo non-external when it shouldn't (#89005) HeaderSearch::MarkFileModuleHeader is no longer properly checking for no-changes, and so sets the HeaderFileInfo for every `textual header` to non-external.
2024-06-14[clang-format] Don't over-indent comment below unbraced body (#95354)Owen Pan1-0/+30
Fixes #45002.
2024-06-15[clang][Interp] Use different inline descriptors for global variablesTimm Bäder1-1/+1
Most of the InlineDescriptor fields were unused for global variables. But more importantly, we need to differentiate between global variables that are uninitialized because they didn't have an initializer when we originally created them, and ones that are uninitialized because they DID have an initializer, but evaluating it failed.
2024-06-14[clang-interp] Use -fno-sized-deallocation in two tests (#95546)Nico Weber1-1/+2
At least on my Windows machine, these two tests fail due to not being able to look up `??3@YAXPEAX_K@Z` (which is `void __cdecl operator delete(void *, unsigned __int64)` in demangled) after 130e93cc26ca. Since they don't test anything related to sized deallocation, just disable sized allocation for them. Possibly fixes #95451.
2024-06-14[clang][HeaderSearch] Fix handling of relative file-paths in ↵kadir çetinkaya1-0/+15
suggestPathToFileForDiagnostics (#95121) Normalize header-to-be-spelled using WorkingDir, similar to search paths themselves. Addresses https://github.com/llvm/llvm-project/issues/81215.
2024-06-13ASTTests: Suppress a warning in -Asserts for #95202 [-Wunused-variable]NAKAMURA Takumi1-0/+2
2024-06-12[clang] fix broken canonicalization of DeducedTemplateSpecializationType ↵Matheus Izvekov2-0/+74
(#95202) This reverts the functional elements of commit 3e78fa860235431323aaf08c8fa922d75a7cfffa and redoes it, by fixing the true root cause of #61317. A TemplateName can be non-canonical; profiling it based on the canonical name would result in inconsistent preservation of as-written information in the AST. The true problem in #61317 is that we would not consider the methods with requirements expression which contain DTSTs as the same in relation to merging of declarations when importing modules. The expressions would never match because they contained DTSTs pointing to different redeclarations of the same class template, but since canonicalization for them was broken, their canonical types would not match either. --- No changelog entry because #61317 was already claimed as fixed in previous release.
2024-06-12[StructuralEquivalence] improve NTTP and CXXDependentScopeMemberExpr ↵Qizhi Hu1-2/+55
comparison (#95190) improve `ASTStructuralEquivalenceTest`: 1. compare the depth and index of NTTP 2. provide comparison of `CXXDependentScopeMemberExpr` to `StmtCompare`. Co-authored-by: huqizhi <836744285@qq.com>
2024-06-12[clang-format] Fix a bug in annotating lambda l_square (#95084)Owen Pan1-0/+6
Fixes #95072.
2024-06-11[clang][nullability] Don't return null fields from `getReferencedDecls()`. ↵martinboehme2-0/+89
(#94983) The patch includes a repro for a case where we were returning a null `FieldDecl` when calling `getReferencedDecls()` on the `InitListExpr` for a union. Also, I noticed while working on this that `RecordInitListHelper` has a bug where it doesn't work correctly for empty unions. This patch also includes a repro and fix for this bug.
2024-06-11[clang][dataflow] Handle `AtomicExpr` in `ResultObjectVisitor`. (#94963)martinboehme1-0/+26
This is one of the node kinds that should be considered an "original initializer". The patch adds a test that was causing an assertion failure in `assert(Children.size() == 1)` without the fix.