Revision tags: llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0 |
|
#
7e037535 |
| 04-Sep-2024 |
Aaron Ballman <aaron@aaronballman.com> |
Disallow btf_type_tag in C++ mode (#107238)
This was always intended to be disallowed in C++ (see the definition in
Attr.td), but failed to add the correct checking code in SemaType.cpp to
ensure
Disallow btf_type_tag in C++ mode (#107238)
This was always intended to be disallowed in C++ (see the definition in
Attr.td), but failed to add the correct checking code in SemaType.cpp to
ensure it was rejected.
Fixes #106864
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, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, 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, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2 |
|
#
06721bb8 |
| 29-Sep-2023 |
Matheus Izvekov <mizvekov@gmail.com> |
[clang] implement common sugared type of inst-dependent DecltypeType (#67739)
While a DecltypeType node itself is not uniqued, an instantiation
dependent DecltypeType will have a
DependentDecltype
[clang] implement common sugared type of inst-dependent DecltypeType (#67739)
While a DecltypeType node itself is not uniqued, an instantiation
dependent DecltypeType will have a
DependentDecltypeType as an underlying type, which is uniqued.
In that case, there can be non-identical non-sugar DecltypeTypes nodes
which nonetheless represent the same type.
Fixes https://github.com/llvm/llvm-project/issues/67603
show more ...
|
Revision tags: llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4 |
|
#
30603049 |
| 05-May-2023 |
Yonghong Song <yhs@fb.com> |
[Clang][BPF] Type print btf_type_tag properly
When running bcc tool execsnoop ([1]) which is built with latest llvm, I hit the following error: $ sudo ./execsnoop.py /virtual/main.c:99:157: erro
[Clang][BPF] Type print btf_type_tag properly
When running bcc tool execsnoop ([1]) which is built with latest llvm, I hit the following error: $ sudo ./execsnoop.py /virtual/main.c:99:157: error: expected ')' data.ppid = ({ typeof(pid_t) _val; __builtin_memset(&_val, 0, sizeof(_val)); bpf_probe_read(&_val, sizeof(_val), (void *)&({ typeof(struct task_struct btf_type_tag(rcu)*) _val; __builtin_memset(&_val, 0, sizeof(_val)); ^ bpf_probe_read(&_val, sizeof(_val), (void *)&task->real_parent); _val; })->tgid); _val; });
The failure reason is due to that the bcc rewriter printed type like struct task_struct btf_type_tag(rcu)* where the compiler cannot recognize what 'btf_type_tag(rcu)' is.
The above type is printed in [2] by UnaryOperator->getType().getAsString() (from clang) in function ProbeVisitor::VisitUnaryOperator.
The original source type looks like ([3]) struct task_struct { ... struct task_struct __rcu *real_parent; ... } where '__rcu' is a macro expanding to '__attribute__((btf_type_tag("rcu")))'.
Let us print btf_type_tag properly in clang so bcc tools and broader type printing will work properly.
With this patch, the above rewrited source code looks like data.ppid = ({ typeof(pid_t) _val; __builtin_memset(&_val, 0, sizeof(_val)); bpf_probe_read(&_val, sizeof(_val), (void *)&({ typeof(struct task_struct __attribute__((btf_type_tag("rcu")))*) _val; __builtin_memset(&_val, 0, sizeof(_val)); bpf_probe_read(&_val, sizeof(_val), (void *)&task->real_parent); _val; })->tgid); _val; });
and execsnoop.py tool can run properly.
[1] https://github.com/iovisor/bcc/blob/master/tools/exitsnoop.py [2] https://github.com/iovisor/bcc/blob/master/src/cc/frontends/clang/b_frontend_action.cc [3] https://github.com/torvalds/linux/blob/master/include/linux/sched.h
Differential Revision: https://reviews.llvm.org/D150017
show more ...
|
Revision tags: llvmorg-16.0.3, llvmorg-16.0.2 |
|
#
2ba88443 |
| 12-Apr-2023 |
Akira Hatanaka <ahatanaka@apple.com> |
Fix an assertion failure in unwrapSugar
An assertion in Qualifiers::addObjCLifetime fails when the ObjC lifetime bits are already set.
Instead of calling operator+=, call addConsistentQualifiers, w
Fix an assertion failure in unwrapSugar
An assertion in Qualifiers::addObjCLifetime fails when the ObjC lifetime bits are already set.
Instead of calling operator+=, call addConsistentQualifiers, which allows the lifetime bits to be set again as long the new value doesn't conflict with the old value.
This fixes https://github.com/llvm/llvm-project/issues/61419.
Differential Revision: https://reviews.llvm.org/D147263
show more ...
|
Revision tags: llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, working, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0 |
|
#
69a64174 |
| 04-Sep-2022 |
Matheus Izvekov <mizvekov@gmail.com> |
[clang] Implement divergence for TypedefType and UsingType
With this patch, TypedefTypes and UsingTypes can have an underlying type which diverges from their corresponding declarations.
For the Typ
[clang] Implement divergence for TypedefType and UsingType
With this patch, TypedefTypes and UsingTypes can have an underlying type which diverges from their corresponding declarations.
For the TypedefType case, this can be seen when getting the common sugared type between two redeclarations with different sugar.
For both cases, this will become important as resugaring is implemented, as this will allow us to resugar these when they were dependent before instantiation.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D133468
show more ...
|
Revision tags: llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
#
00ce2717 |
| 19-Jul-2022 |
Matheus Izvekov <mizvekov@gmail.com> |
[clang] extend getCommonSugaredType to merge sugar nodes
This continues D111283 by extending the getCommonSugaredType implementation to also merge non-canonical type nodes.
We merge these nodes by
[clang] extend getCommonSugaredType to merge sugar nodes
This continues D111283 by extending the getCommonSugaredType implementation to also merge non-canonical type nodes.
We merge these nodes by going up starting from the canonical node, calculating their merged properties on the way.
If we reach a pair that is too different, or which we could not otherwise unify, we bail out and don't try to keep going on to the next pair, in effect striping out all the remaining top-level sugar nodes. This avoids mismatching 'companion' nodes, such as ElaboratedType, so that they don't end up elaborating some other unrelated thing.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D130308
show more ...
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1 |
|
#
67e22983 |
| 10-Oct-2021 |
Matheus Izvekov <mizvekov@gmail.com> |
[clang] use getCommonSugar in an assortment of places
For this patch, a simple search was performed for patterns where there are two types (usually an LHS and an RHS) which are structurally the same
[clang] use getCommonSugar in an assortment of places
For this patch, a simple search was performed for patterns where there are two types (usually an LHS and an RHS) which are structurally the same, and there is some result type which is resolved as either one of them (typically LHS for consistency).
We change those cases to resolve as the common sugared type between those two, utilizing the new infrastructure created for this purpose.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D111509
show more ...
|
#
aff1f631 |
| 10-Oct-2021 |
Matheus Izvekov <mizvekov@gmail.com> |
[clang] use getCommonSugar in an assortment of places
For this patch, a simple search was performed for patterns where there are two types (usually an LHS and an RHS) which are structurally the same
[clang] use getCommonSugar in an assortment of places
For this patch, a simple search was performed for patterns where there are two types (usually an LHS and an RHS) which are structurally the same, and there is some result type which is resolved as either one of them (typically LHS for consistency).
We change those cases to resolve as the common sugared type between those two, utilizing the new infrastructure created for this purpose.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D111509
show more ...
|
#
48203b32 |
| 08-Sep-2022 |
Fangrui Song <i@maskray.me> |
Revert D130308 "[clang] extend getCommonSugaredType to merge sugar nodes"
This reverts commit 16e5d6d7f98f1119aab3d10ec4f9e59b5aacd359. There are multiple complaints on the review.
In addition, it
Revert D130308 "[clang] extend getCommonSugaredType to merge sugar nodes"
This reverts commit 16e5d6d7f98f1119aab3d10ec4f9e59b5aacd359. There are multiple complaints on the review.
In addition, it may cause spurious ``` error: invalid operands to binary expression ('SinkPrinter' and 'char[cluster_name_length]') note: candidate template ignored: substitution failure: variably modified type 'char *' cannot be used as a template argument SinkPrinter operator<<(const SinkPrinter &s, T) { ``` for some C++ code
show more ...
|
#
16e5d6d7 |
| 19-Jul-2022 |
Matheus Izvekov <mizvekov@gmail.com> |
[clang] extend getCommonSugaredType to merge sugar nodes
This continues D111283 by extending the getCommonSugaredType implementation to also merge non-canonical type nodes.
We merge these nodes by
[clang] extend getCommonSugaredType to merge sugar nodes
This continues D111283 by extending the getCommonSugaredType implementation to also merge non-canonical type nodes.
We merge these nodes by going up starting from the canonical node, calculating their merged properties on the way.
If we reach a pair that is too different, or which we could not otherwise unify, we bail out and don't try to keep going on to the next pair, in effect striping out all the remaining top-level sugar nodes. This avoids mismatching 'companion' nodes, such as ElaboratedType, so that they don't end up elaborating some other unrelated thing.
Depends on D111509
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D130308
show more ...
|
#
d42122cd |
| 10-Oct-2021 |
Matheus Izvekov <mizvekov@gmail.com> |
[clang] use getCommonSugar in an assortment of places
For this patch, a simple search was performed for patterns where there are two types (usually an LHS and an RHS) which are structurally the same
[clang] use getCommonSugar in an assortment of places
For this patch, a simple search was performed for patterns where there are two types (usually an LHS and an RHS) which are structurally the same, and there is some result type which is resolved as either one of them (typically LHS for consistency).
We change those cases to resolve as the common sugared type between those two, utilizing the new infrastructure created for this purpose.
Depends on D111283
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D111509
show more ...
|