Revision tags: llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4 |
|
#
46d750be |
| 16-Nov-2024 |
Kazu Hirata <kazu@google.com> |
[Sema] Remove unused includes (NFC) (#116461)
Identified with misc-include-cleaner.
|
Revision tags: llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0 |
|
#
82034aca |
| 14-Sep-2024 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[C++20] [Modules] Warn for importing implementation partition unit in interface units (#108493)
Recently, there are multiple false positive issue reports about the
reachability of implementation pa
[C++20] [Modules] Warn for importing implementation partition unit in interface units (#108493)
Recently, there are multiple false positive issue reports about the
reachability of implementation partition units:
- https://github.com/llvm/llvm-project/issues/105882
- https://github.com/llvm/llvm-project/issues/101348
- https://lists.isocpp.org/core/2024/08/16232.php
And according to our use experience for modules, we find it is a pretty
good practice to not import implementation partition units in the
interface units. It can help developers to have a pretty good mental
model for when to use an implementation partition unit: that any unit in
the module but not in the module interfaces can be in the implementation
partition unit.
So I think it is good to add the diagnostics.
show more ...
|
Revision tags: llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init |
|
#
938cbdb4 |
| 01-Jul-2024 |
Helena Kotas <hekotas@microsoft.com> |
[HLSL] Implement `export` keyword (#96823)
Implements `export` keyword in HLSL.
There are two ways the `export` keyword can be used:
1. On individual function declarations
```
export void f()
[HLSL] Implement `export` keyword (#96823)
Implements `export` keyword in HLSL.
There are two ways the `export` keyword can be used:
1. On individual function declarations
```
export void f() {}
```
2. On a group of function declaration:
```
export {
void f1();
void f2() {}
}
```
Functions declared with the `export` keyword have external linkage. The
implementation does not include validation of when a function can or
cannot be exported, such as when it has resource argument or semantic
annotations. That will be covered by llvm/llvm-project#93330.
Currently all function declarations in global or named namespaces have
external linkage by default so there are no specific code changes
required right now to make sure exported function have external linkage
as well. That will change as part of llvm/llvm-project#92071. Any
additional changes to make sure exported functions still have external
linkage will be done as part of this work item.
Fixes #92812
show more ...
|
#
bae2c549 |
| 01-Jul-2024 |
Vlad Serebrennikov <serebrennikov.vladislav@gmail.com> |
[clang][NFC] Move documentation of `Sema` functions into `Sema.h`
This patch moves documentation of `Sema` functions from `.cpp` files to `Sema.h` when there was no documentation in the latter, or i
[clang][NFC] Move documentation of `Sema` functions into `Sema.h`
This patch moves documentation of `Sema` functions from `.cpp` files to `Sema.h` when there was no documentation in the latter, or it can be trivially subsumed. More complicated cases when there's less trivial divergence between documentation attached to declaration and the one attached to implementation are left for a later PR that would require review.
It appears that doxygen can find the documentation for a function defined out-of-line even if it's attached to an implementation, and not declaration. But other tools, e.g. clangd, are not as powerful. So this patch significantly improves autocompletion experience for (at least) clangd-based IDEs.
show more ...
|
#
790f9318 |
| 24-Jun-2024 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[NFC] [Modules] Extract the logic to decide whether the module units belongs to the same module
This patch extracts the logci to decide how we decide the module units belongs to the same module into
[NFC] [Modules] Extract the logic to decide whether the module units belongs to the same module
This patch extracts the logci to decide how we decide the module units belongs to the same module into a member function of ASTContext. This is helpful to refactor the implementation in the future.
show more ...
|
Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5 |
|
#
aac4d034 |
| 19-Apr-2024 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[C++20] [Modules] Mark exported all declarations as used
Close https://github.com/llvm/llvm-project/issues/85122
As the title suggested, it looks pretty sensible.
|
#
f2695a1c |
| 17-Apr-2024 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[C++20] [Modules] Avoid writing untouched DeclUpdates from GMF in Reduced BMI
Mitigate https://github.com/llvm/llvm-project/issues/61447
The root cause of the above problem is that when we write a
[C++20] [Modules] Avoid writing untouched DeclUpdates from GMF in Reduced BMI
Mitigate https://github.com/llvm/llvm-project/issues/61447
The root cause of the above problem is that when we write a declaration, we need to lookup all the redeclarations in the imported modules. Then it will be pretty slow if there are too many redeclarations in different modules. This patch doesn't solve the porblem.
What the patchs mitigated is, when we writing a named module, we shouldn't write the declarations from GMF if it is unreferenced **in current module unit**. The difference here is that, if the declaration is used in the imported modules, we used to emit it as an update. But we definitely want to avoid that after this patch.
For that reproducer in https://github.com/llvm/llvm-project/issues/61447, it used to take 2.5s to compile and now it only takes 0.49s to compile, which is a big win.
show more ...
|
Revision tags: llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2 |
|
#
4d629298 |
| 13-Mar-2024 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[C++20] [Modules] Disambuguous Clang module and C++20 Named module further
This patch tries to make the boundary of clang module and C++20 named module more clear.
The changes included:
- Rename `
[C++20] [Modules] Disambuguous Clang module and C++20 Named module further
This patch tries to make the boundary of clang module and C++20 named module more clear.
The changes included:
- Rename `TranslationUnitKind::TU_Module` to `TranslationUnitKind::TU_ClangModule`. - Rename `Sema::ActOnModuleInclude` to `Sema::ActOnAnnotModuleInclude`. - Rename `ActOnModuleBegin` to `Sema::ActOnAnnotModuleBegin`. - Rename `Sema::ActOnModuleEnd` to `Sema::ActOnAnnotModuleEnd`. - Removes a warning if we're trying to compile a non-module unit as C++20 module unit. This is not actually useful and makes (the future) implementation unnecessarily complex.
This patch meant to be a NFC fix. But it shows that it fixed a bug suprisingly that previously we would surppress the unused-value warning in named modules. Because it shares the same logic with clang modules, which has headers semantics. This shows the change is meaningful.
show more ...
|
Revision tags: llvmorg-18.1.1 |
|
#
d3df2a83 |
| 06-Mar-2024 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[C++20] [Modules] Handle transitive import in the module properly
Close https://github.com/llvm/llvm-project/issues/84002
Per [module.import]p7:
> Additionally, when a module-import-declaration in
[C++20] [Modules] Handle transitive import in the module properly
Close https://github.com/llvm/llvm-project/issues/84002
Per [module.import]p7:
> Additionally, when a module-import-declaration in a module unit of > some module M imports another module unit U of M, it also imports all > translation units imported by non-exported module-import-declarations > in the module unit purview of U.
However, we only tried to implement it during the implicit import of primary module interface for module implementation unit.
Also we didn't implement the last sentence from [module.import]p7 completely:
> These rules can in turn lead to the importation of yet more > translation units.
This patch tries to care the both issues.
show more ...
|
Revision tags: llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init |
|
#
c2c840bd |
| 28-Dec-2023 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[Modules] Don't prevent @import from ObjectiveC
Previously we forbiden the users to import named modules from clang header modules. However, due to an oversight, the @import form of Objective C got
[Modules] Don't prevent @import from ObjectiveC
Previously we forbiden the users to import named modules from clang header modules. However, due to an oversight, the @import form of Objective C got involved. This is not want and we fix that in this patch.
show more ...
|
#
f3dcc235 |
| 13-Dec-2023 |
Kazu Hirata <kazu@google.com> |
[clang] Use StringRef::{starts,ends}_with (NFC) (#75149)
This patch replaces uses of StringRef::{starts,ends}with with
StringRef::{starts,ends}_with for consistency with
std::{string,string_view}:
[clang] Use StringRef::{starts,ends}_with (NFC) (#75149)
This patch replaces uses of StringRef::{starts,ends}with with
StringRef::{starts,ends}_with for consistency with
std::{string,string_view}::{starts,ends}_with in C++20.
I'm planning to deprecate and eventually remove
StringRef::{starts,ends}with.
show more ...
|
Revision tags: llvmorg-17.0.6, llvmorg-17.0.5 |
|
#
0f7aaeb3 |
| 09-Nov-2023 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[C++20] [Modules] Allow export from language linkage
Close https://github.com/llvm/llvm-project/issues/71347
Previously I misread the concept of module purview. I thought if a declaration attached
[C++20] [Modules] Allow export from language linkage
Close https://github.com/llvm/llvm-project/issues/71347
Previously I misread the concept of module purview. I thought if a declaration attached to a unnamed module, it can't be part of the module purview. But after the issue report, I recognized that module purview is more of a concept about locations instead of semantics.
Concretely, the things in the language linkage after module declarations can be exported.
This patch refactors `Module::isModulePurview()` and introduces some possible code cleanups.
show more ...
|
#
427f13bd |
| 09-Nov-2023 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[NFC] [C++20] [Modules] Remove 'ModuleInterface' bit in Sema::ModuleScope
The 'ModuleInterface' in Sema::ModuleScope is confusing. It actually means 'not implementation'. This patch removes that bit
[NFC] [C++20] [Modules] Remove 'ModuleInterface' bit in Sema::ModuleScope
The 'ModuleInterface' in Sema::ModuleScope is confusing. It actually means 'not implementation'. This patch removes that bit and extract the information from the recorded clang::Module.
show more ...
|
#
87759476 |
| 02-Nov-2023 |
Vlad Serebrennikov <serebrennikov.vladislav@gmail.com> |
[clang][NFC] Refactor `clang::Linkage` (#71049)
This patch introduces a new enumerator `Invalid = 0`, shifting other enumerators by +1. Contrary to how it might sound, this actually affirms status q
[clang][NFC] Refactor `clang::Linkage` (#71049)
This patch introduces a new enumerator `Invalid = 0`, shifting other enumerators by +1. Contrary to how it might sound, this actually affirms status quo of how this enum is stored in `clang::Decl`:
```
/// If 0, we have not computed the linkage of this declaration.
/// Otherwise, it is the linkage + 1.
mutable unsigned CacheValidAndLinkage : 3;
```
This patch makes debuggers to not be mistaken about enumerator stored in this bit-field. It also converts `clang::Linkage` to a scoped enum.
show more ...
|
#
65761200 |
| 01-Nov-2023 |
Vlad Serebrennikov <serebrennikov.vladislav@gmail.com> |
[clang][NFC] Refactor `LinkageSpecDecl::LanguageIDs`
This patch converts `LinkageSpecDecl::LanguageIDs` into scoped enum, and moves it to namespace scope, so that it can be forward-declared where re
[clang][NFC] Refactor `LinkageSpecDecl::LanguageIDs`
This patch converts `LinkageSpecDecl::LanguageIDs` into scoped enum, and moves it to namespace scope, so that it can be forward-declared where required.
show more ...
|
Revision tags: llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0 |
|
#
523c4712 |
| 08-Sep-2023 |
Jan Svoboda <jan_svoboda@apple.com> |
Reapply "[clang] NFCI: Adopt `SourceManager::getFileEntryRefForID()`"
This reapplies ddbcc10b9e26b18f6a70e23d0611b9da75ffa52f, except for a tiny part that was reverted separately: 65331da0032ab4253a
Reapply "[clang] NFCI: Adopt `SourceManager::getFileEntryRefForID()`"
This reapplies ddbcc10b9e26b18f6a70e23d0611b9da75ffa52f, except for a tiny part that was reverted separately: 65331da0032ab4253a4bc0ddcb2da67664bd86a9. That will be reapplied later on, since it turned out to be more involved.
This commit is enabled by 5523fefb01c282c4cbcaf6314a9aaf658c6c145f and f0f548a65a215c450d956dbcedb03656449705b9, specifically the part that makes 'clang-tidy/checkers/misc/header-include-cycle.cpp' separator agnostic.
show more ...
|
#
0a9611fd |
| 06-Sep-2023 |
Jan Svoboda <jan_svoboda@apple.com> |
Revert "[clang] NFCI: Adopt `SourceManager::getFileEntryRefForID()`"
This reverts commit ddbcc10b9e26b18f6a70e23d0611b9da75ffa52f.
The 'clang-tidy/checkers/misc/header-include-cycle.cpp' test start
Revert "[clang] NFCI: Adopt `SourceManager::getFileEntryRefForID()`"
This reverts commit ddbcc10b9e26b18f6a70e23d0611b9da75ffa52f.
The 'clang-tidy/checkers/misc/header-include-cycle.cpp' test started failing on Windows: https://lab.llvm.org/buildbot/#/builders/216/builds/26855.
show more ...
|
#
ddbcc10b |
| 06-Sep-2023 |
Jan Svoboda <jan_svoboda@apple.com> |
[clang] NFCI: Adopt `SourceManager::getFileEntryRefForID()`
This commit replaces some calls to the deprecated `FileEntry::getName()` with `FileEntryRef::getName()` by swapping current usages of `Sou
[clang] NFCI: Adopt `SourceManager::getFileEntryRefForID()`
This commit replaces some calls to the deprecated `FileEntry::getName()` with `FileEntryRef::getName()` by swapping current usages of `SourceManager::getFileEntryForID()` with `SourceManager::getFileEntryRefForID()`. This lowers the number of usages of the deprecated `FileEntry::getName()` from 95 to 50.
show more ...
|
Revision tags: llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3 |
|
#
574ee1c0 |
| 17-Aug-2023 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[C++20] [Modules] Prevent to accept clang modules
Close https://github.com/llvm/llvm-project/issues/64755
This wouldn't affect the form @import as the test shows. The two affected test case `diag-
[C++20] [Modules] Prevent to accept clang modules
Close https://github.com/llvm/llvm-project/issues/64755
This wouldn't affect the form @import as the test shows. The two affected test case `diag-flags.cpp` and `diag-pragma.cpp` are old test cases in 2017 and 2018, when we're not so clear about the direction of modules. And the things that these 2 tests tested can be covered by clang modules naturally. So I change the them into clang modules to not block this patch.
show more ...
|
Revision tags: llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init |
|
#
b0abd489 |
| 17-Jun-2023 |
Elliot Goodrich <elliotgoodrich@gmail.com> |
[llvm] Add missing StringExtras.h includes
In preparation for removing the `#include "llvm/ADT/StringExtras.h"` from the header to source file of `llvm/Support/Error.h`, first add in all the missing
[llvm] Add missing StringExtras.h includes
In preparation for removing the `#include "llvm/ADT/StringExtras.h"` from the header to source file of `llvm/Support/Error.h`, first add in all the missing includes that were previously included transitively through this header.
show more ...
|
#
b37233a2 |
| 12-Jun-2023 |
Iain Sandoe <iain@sandoe.co.uk> |
[C++20][Modules] Complete implementation of module.import p7.
The following test fails to compile TU b.cpp because we are not making the transitively imported modules visible (per [module.import]/p7
[C++20][Modules] Complete implementation of module.import p7.
The following test fails to compile TU b.cpp because we are not making the transitively imported modules visible (per [module.import]/p7)
``` a.cppm: export module a;
export int foo() { return 42; }
b.cppm: export module b; import a;
export int bar();
b.cpp: module b;
int bar() { return foo(); }
clang++ -c -std=c++2b -fmodule-output a.cppm clang++ -c -std=c++2b -fmodule-output -fprebuilt-module-path=. b.cppm clang++ -c -std=c++2b -fprebuilt-module-path=. b.cpp b.cpp:4:12: error: declaration of 'foo' must be imported from module 'a' before it is required return foo(); ```
This is fixed by the following patch (which also addresses a FIXME in basic.def.odr/p6.cppm).
Differential Revision: https://reviews.llvm.org/D152746
show more ...
|
#
e5c7904f |
| 14-Jun-2023 |
Iain Sandoe <iain@sandoe.co.uk> |
[C++20][Modules] Implement P2615R1 revised export diagnostics.
It has been reported to that the current clang errors for, specifically, static_assert in export contexts are a serious blocker to ado
[C++20][Modules] Implement P2615R1 revised export diagnostics.
It has been reported to that the current clang errors for, specifically, static_assert in export contexts are a serious blocker to adoption of modules in some cases.
There is also implementation divergence with GCC and MSVC allowing the constructs mentioned below where clang currently rejects them with an error.
The category of errors [for declarations in an exported context] is: (unnamed, static_assert, empty and asm decls). These are now permitted after P2615R1 which was approved by WG21 as a DR (and thus should be applied to C++20 as well).
This patch removes these diagnostics and amends the testsuite accordingly.
Differential Revision: https://reviews.llvm.org/D152946
show more ...
|
Revision tags: llvmorg-16.0.6, llvmorg-16.0.5 |
|
#
4d0cfa6d |
| 26-May-2023 |
Kadir Cetinkaya <kadircet@google.com> |
[clang] Don't create import decls without -fmodules
When modules are disabled, there's no loaded module for these import decls to point at. This results in crashes when there are modulemap files but
[clang] Don't create import decls without -fmodules
When modules are disabled, there's no loaded module for these import decls to point at. This results in crashes when there are modulemap files but no -fmodules flag (this configuration is used for layering check violations).
This patch makes sure import declarations are introduced only when modules are enabled, which makes this case similar to textual headers (no import decls are created for #include of textual headers from a modulemap).
Differential Revision: https://reviews.llvm.org/D152274
show more ...
|
Revision tags: llvmorg-16.0.4 |
|
#
52bc4b16 |
| 10-May-2023 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[NFC] [C++20] [Modules] Refactor Sema::isModuleUnitOfCurrentTU into Decl::isInAnotherModuleUnit
Refactor `Sema::isModuleUnitOfCurrentTU` to `Decl::isInAnotherModuleUnit` to make code simpler a littl
[NFC] [C++20] [Modules] Refactor Sema::isModuleUnitOfCurrentTU into Decl::isInAnotherModuleUnit
Refactor `Sema::isModuleUnitOfCurrentTU` to `Decl::isInAnotherModuleUnit` to make code simpler a little bit. Note that although this patch introduces a FIXME, this is an existing issue and this patch just tries to describe it explicitly.
show more ...
|
#
fc89e904 |
| 18-May-2023 |
Chuanqi Xu <yedeng.yd@linux.alibaba.com> |
[C++20] [Modules] Emit an warning for experimental header units
Currently, the header units are rarely used and it is not well tested. To avoid further misunderstandings, let's mark it as experiment
[C++20] [Modules] Emit an warning for experimental header units
Currently, the header units are rarely used and it is not well tested. To avoid further misunderstandings, let's mark it as experimental and emit a warning when users wants to import it.
This is discussed in modules developers meeting.
show more ...
|