279 Commits

Author SHA1 Message Date
Qizhi Hu
ab80d00438
[clang][ASTImporter] fix variable inline of CXX17 (#87314)
Fix crash in the testcase from
https://github.com/llvm/llvm-project/issues/75114#issuecomment-1872595956
Forget to set inline of variable declaration would make
`isThisDeclarationADefinition` get incorrect result and didn't get
imported variable. This will lead to a new `VarTemplateDecl` being
created and call `setDescribedVarTemplate` again which produces the
crash.

Co-authored-by: huqizhi <836744285@qq.com>
2024-04-05 08:41:06 +08:00
Balázs Kéri
9f80ecb308
[clang][ASTImporter] Improve import of variable template specializations. (#78284)
Code of `VisitVarTemplateSpecializationDecl` was rewritten based on code
of `VisitVarDecl`. Additional changes (in structural equivalence) were
made to make tests pass.
2024-01-29 10:04:17 +01:00
Julian Schmidt
cbaadb1f0f
[clang][ASTMatcher] Add matchers for CXXFoldExpr (#71245)
Adds support for the following matchers related to `CXXFoldExpr`:
`cxxFoldExpr`, `callee`,
  `hasInit`, `hasPattern`, `isRightFold`, `isLeftFold`,
  `isUnaryFold`, `isBinaryFold`, `hasOperator`, `hasLHS`, `hasRHS`.
2024-01-16 17:13:38 +01:00
Balázs Kéri
5e355942cd
[clang][ASTImporter] Fix import of variable template redeclarations. (#72841)
In some cases variable templates (specially if static member of record)
were not correctly imported and an assertion "Missing call to
MapImported?" could happen.
2024-01-15 12:38:02 +01:00
Balázs Kéri
4b0314d14f
[clang][ASTImporter] Improve import of friend class templates. (#74627)
A friend template that is in a dependent context is not linked into
declaration chains (for example with the definition of the befriended
template). This condition was not correctly handled by `ASTImporter`.
2024-01-11 11:18:11 +01:00
Qizhi Hu
4de971c230
[clang][ASTImporter] import InstantiatedFromMember of ClassTemplateSpecializationDecl (#76493)
import of `ClassTemplateSpecializationDecl` didn't set
`InstantiatedFromMember` and this makes ast-dump crash. import and set
`InstantiatedFromMember`. fix
[issue](https://github.com/llvm/llvm-project/issues/76469)

Co-authored-by: huqizhi <836744285@qq.com>
2024-01-04 21:21:53 +08:00
Qizhi Hu
9b99a307b2
[clang][ASTImporter] skip TemplateTypeParmDecl in VisitTypeAliasTemplateDecl (#74919)
Skip checking `TemplateTypeParmDecl ` in `VisitTypeAliasTemplateDecl`.
[Fix this crash](https://github.com/llvm/llvm-project/issues/74765)

Co-authored-by: huqizhi <836744285@qq.com>
2023-12-25 10:13:35 +08:00
Qizhi Hu
625197d39c
[clang][ASTImporter] Support Importer of BuiltinBitCastExpr (#74813)
Since import `ExplicitCastExpr` lacks of processing
`BuiltinBitCastExprClass` type, it would reach to the 'unreachable' code
and produce the crash. This patch aims to fix the
[crash](https://github.com/llvm/llvm-project/issues/74774) and try to
handle `BuiltinBitCastExpr`.

Co-authored-by: huqizhi <836744285@qq.com>
2023-12-22 18:06:59 +08:00
Balázs Kéri
0d903b689a
[clang][ASTImporter] Import AlignValueAttr correctly. (#75308)
Expression of attribute `align_value` was not imported. Import of the
attribute is corrected, a test for it is added, other related tests with
FIXME are updated.
Fixes #75054.
2023-12-22 10:07:38 +01:00
Qizhi Hu
72e8ab7d44
[clang][ASTImporter] add processing of SubstNonTypeTemplateParmExpr in isAncestorDeclContextOf (#74991)
Lack of processing of `SubstNonTypeTemplateParmExpr` in
`isAncestorDeclContextOf` would make `hasAutoReturnTypeDeclaredInside`
returns false and lead to infinite recursion. This patch adds the
processor and try to fix [this
issue](https://github.com/llvm/llvm-project/issues/74839)

Co-authored-by: huqizhi <836744285@qq.com>
2023-12-21 15:05:33 +08:00
Qizhi Hu
3287ae8f65
[clang][ASTImporter] IdentifierInfo of Attribute should be set using 'ToASTContext' (#73290)
Co-authored-by: huqizhi <836744285@qq.com>
2023-11-29 09:33:37 +08:00
Balázs Kéri
3d8a9105d7
[clang][ASTImporter] Fix import of SubstTemplateTypeParmType in return type of function. (#69724)
Import of a function with `auto` return type that is expanded to a
`SubstTemplateTypeParmType` could fail if the function itself is the
template specialization where the parameter was replaced.
2023-11-24 14:35:10 +01:00
Vlad Serebrennikov
edd690b02e
[clang][NFC] Refactor TagTypeKind (#71160)
This patch converts TagTypeKind into scoped enum. Among other benefits,
this allows us to forward-declare it where necessary.
2023-11-03 21:45:39 +04:00
Exile
39dfaf0d0d
[clang][ASTImporter] Fix crash when template class static member imported to other translation unit. (#68774)
Fixes: #68769

Co-authored-by: miaozhiyuan <miaozhiyuan@feysh.com>
2023-11-01 18:29:37 +08:00
Jessica Clarke
f9ead46931
[AST] Only dump desugared type when visibly different (#65214)
These are an artifact of how types are structured but serve little
purpose, merely showing that the type is sugared in some way. For
example, ElaboratedType's existence means struct S gets printed as
'struct S':'struct S' in the AST, which is unnecessary visual clutter.
Note that skipping the second print when the types have the same string
matches what we do for diagnostics, where the aka will be skipped.
2023-10-26 19:28:28 +01:00
Paul Walker
72561b3894
[CXXNameMangler] Correct the mangling of SVE ACLE types within function names. (#69460)
* Mark SVE ACLE types as substitution candidates.
* Change mangling of svbfloat16_t from __SVBFloat16_t to
  __SVBfloat16_t.

https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst

This is an ABI break with the old behaviour available via
"-fclang-abi-compat=17".
2023-10-24 14:02:51 +01:00
Balázs Kéri
5857fec27f
[clang][ASTImporter] Fix of possible crash "Did not find base!". (#67680)
A problem with AST import could lead to multiple instances of the same
template class specialization, with different template arguments. The
difference was caused by pointers to different declarations of the same
function.
Problem is fixed by using the canonical declaration at import.

Co-authored-by: Balázs Kéri <balazs.keri@ericsson.com>
2023-10-16 10:31:01 +02:00
Kazu Hirata
3743c53dd1 [clang] Remove unused using decls (NFC)
Identified with misc-unused-using-decls.
2023-10-13 20:09:32 -07:00
Kazu Hirata
f3cfd3812b [AST] Stop including llvm/ADT/StringMap.h (NFC)
The last use of StringMap was removed by:

  commit 20157410862d376c624cc24bffd9730290a16142
  Author: Vince Bridgers <vince.a.bridgers@gmail.com>
  Date:   Thu Jul 16 12:55:32 2020 -0500
2023-10-13 18:22:42 -07:00
Qizhi Hu
869d1680ed
[clang][ASTImporter] Fix crash when import VarTemplateDecl in record (#67522)
[clang][ASTImporter] Fix crash when import `VarTemplateDecl` in record
static VarTemplateDecl in record isn't a definition, when imported
before, it will crash in `ASTContext::setTemplateOrSpecializationInfo`
due to setting specialization while it already exists. This patch skip
this specific case.

Co-authored-by: huqizhi <836744285@qq.com>
2023-10-07 09:36:04 +08:00
Jan Svoboda
2da8f30c5e [clang] NFCI: Use FileEntryRef in SourceManager::overrideFileContents() 2023-09-29 09:30:21 -07:00
Haowei Wu
a866ce789e Reland "Update GoogleTest to v1.14.0 (#65823)"
This patch reland 54c1a9b20d89e85cd60d002c77b34c00f36520f4, which
updates GoogleTest to v1.14.0. This patch fixes bots failures caused
by the early patch.
2023-09-13 14:17:24 -07:00
Haowei Wu
499d713bcb Revert "Update GoogleTest to v1.14.0 (#65823)"
This reverts commit 54c1a9b20d89e85cd60d002c77b34c00f36520f4.
It breaks a few llvm bots.
2023-09-12 11:44:13 -07:00
Zero Omega
54c1a9b20d
Update GoogleTest to v1.14.0 (#65823)
This PR updates GoogleTest to v1.14.0 . It also updates the Clang
ASTTest to fix a compatibility issue with the new GoogleTest.
2023-09-12 10:32:26 -07:00
dingfei
e7bd436757 [clang][ASTImporter] Add import of a few type related nodes
Add import of type-related nodes:
  - bitIntType
  - constantMatrixType
  - dependentAddressSpaceType
  - dependentBitIntType
  - dependentSizedMatrixType
  - dependentVectorType
  - objcTypeParamDecl
  - objcTypeParamType
  - pipeType
  - vectorType

Reviewed By: balazske

Differential Revision: https://reviews.llvm.org/D158948
2023-09-01 07:59:21 +08:00
dingfei
1654634f6f [clang][ASTImporter] Fix partially import of repeated friend templates
Pointer comparison is not reliable in this case. Use ASTStructuralEquivalence
to compute FriendCountAndPosition.

Reviewed By: balazske

Differential Revision: https://reviews.llvm.org/D157684
2023-08-24 09:10:14 +08:00
huqizhi
07ab514008 [clang][ASTImporter]Skip check depth of friend template parameter
Depth of the parameter of friend template class declaration in a
template class is 1, while in the specialization the depth is 0.
This will cause failure on 'IsStructurallyEquivalent' as a name
conflict in 'VisitClassTemplateDecl'(see testcase of
'SkipComparingFriendTemplateDepth'). The patch fix it by ignore
the depth only in this special case.

Reviewed By: balazske

Differential Revision: https://reviews.llvm.org/D156693
2023-08-22 13:16:11 +08:00
dingfei
91c4b5550e [clang] Update NumFunctionDeclBits for FunctionDeclBitfields
NumFunctionDeclBits is not updated when DeductionCandidateKind is
incremented.

Fixes https://github.com/llvm/llvm-project/issues/64171

Reviewed By: cor3ntin, balazske, aaron.ballman

Differential Revision: https://reviews.llvm.org/D158145
2023-08-17 20:28:41 +08:00
dingfei
eabc7add1f [clang][ASTImporter] Remove extra FunctionTemplateDecl introduced by templated friend
An extranous FunctionTemplateDecl is introduced in the following testcase:

  template <typename T> struct A {
    template <typename U> friend void f();
  };

"To" Context:

  ClassTemplateDecl 0x55dae7116618 <input.cc:1:1, col:73> col:30 A
  |-TemplateTypeParmDecl 0x55dae7116490 <col:11, col:20> col:20 typename depth 0 index 0 T
  `-CXXRecordDecl 0x55dae7116550 <col:23, col:73> col:30 struct A definition
    |-DefinitionData empty aggregate standard_layout trivially_copyable pod trivial literal has_constexpr_non_copy_move_ctor can_const_default_init
    | |-DefaultConstructor exists trivial constexpr needs_implicit defaulted_is_constexpr
    | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param
    | |-MoveConstructor exists simple trivial needs_implicit
    | |-CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param
    | |-MoveAssignment exists simple trivial needs_implicit
    | `-Destructor simple irrelevant trivial needs_implicit
    |-FunctionTemplateDecl 0x55dae7116a38 parent 0x55dae6fa2b68 <col:35, col:71> col:69 f                            // extranous node
    | |-TemplateTypeParmDecl 0x55dae7116860 <col:45, col:54> col:54 typename depth 1 index 0 U
    | `-FunctionDecl 0x55dae7116968 parent 0x55dae6fa2b68 <col:57, col:71> col:69 f 'void ()'
    |-FriendDecl 0x55dae7116aa0 <col:35, col:71> col:69
    | `-FunctionTemplateDecl 0x55dae7116a38 parent 0x55dae6fa2b68 <col:35, col:71> col:69 f
    |   |-TemplateTypeParmDecl 0x55dae7116860 <col:45, col:54> col:54 typename depth 1 index 0 U
    |   `-FunctionDecl 0x55dae7116968 parent 0x55dae6fa2b68 <col:57, col:71> col:69 f 'void ()'
    `-CXXRecordDecl 0x55dae7116ae0 <col:23, col:30> col:30 implicit struct A

Reviewed By: balazske

Differential Revision: https://reviews.llvm.org/D157691
2023-08-16 18:03:16 +08:00
dingfei
3b0eeb6cdb [clang][ASTImporter] Add import of 'MacroQualifiedType'
Add import of 'MacroQualifiedType'.

Reviewed By: balazske

Differential Revision: https://reviews.llvm.org/D157780
2023-08-16 18:03:16 +08:00
dingfei
df21f9fc03 [clang][ASTImporter] Add import of 'ConvertVectorExpr'
Add import of ConvertVectorExpr.

Reviewed By: balazske

Differential Revision: https://reviews.llvm.org/D157249
2023-08-08 10:23:56 +08:00
dingfei
db92fb8726 [clang][ASTImporter] Add import of 'DependentSizedExtVectorType'
Add import of 'DependentSizedExtVectorType'.

Reviewed By: balazske

Differential Revision: https://reviews.llvm.org/D157238
2023-08-08 10:22:00 +08:00
dingfei
91b7952afc [ASTImporter] Fix corrupted RecordLayout caused by circular referenced fields
UnaryOperator(&)'s creation might need layout of some records
whose fields importation are still on fly, the layout is incorrectly
computed and cached. Clients relying on this will not work properly
or crash direclty (e.g StaticAnalyzer's MemRegion.cpp (calculateOffset)).

Use UnaryOperator::CreateEmpty() instead of UnaryOperator::Create()
to avoid this computation.

Fixes https://github.com/llvm/llvm-project/issues/64170

Reviewed By: aaron.ballman, balazske, shafik

Differential Revision: https://reviews.llvm.org/D156201
2023-08-02 11:21:10 +08:00
dingfei
5f2157f8fc [clang][ASTImporter] Fix friend class template import within dependent context
For friend class template within dependent context:

1. Should not do structure matching checking. This fixes importing failure of
   template with non-type parm;
2. Should not be added into redecls chain.

See Sema::CheckClassTemplate().

Fixes https://github.com/llvm/llvm-project/issues/64169.

Reviewed By: aaron.ballman, balazske, shafik

Differential Revision: https://reviews.llvm.org/D155661
2023-08-02 11:21:09 +08:00
Balázs Kéri
f4438385d4 [clang][ASTImporter] Fix import of recursive field initializer.
Import of field initializers with circular reference was not working,
this is fixed now.

Fixes issue #63120

Reviewed By: steakhal

Differential Revision: https://reviews.llvm.org/D155574
2023-07-27 09:34:34 +02:00
dingfei
e953669872 [ASTImporter] Fields are imported first and reordered for correct layout
Fields are imported first and reordered for correct layout.
For partially imported record, layout computation is incorrect.

Differential Revision: https://reviews.llvm.org/D154764
2023-07-18 17:07:19 +08:00
dingfei
5b99aa57f7 [ASTImporter] Fix 'isVirtual()' assert failure while import overridden methods
CXXMethodDecl::isVirtual() count the number of overridden methods.
This assertion is not true before overridden methods are fully loaded.
The body of this CXXMethodDecl can introduce deps on a derived class
which contains a method overriding this method, causing the assertion failure.

ImportOverriddenMethods() is moved before body loading to fix this issue.

Testcase is contributed by Balázs Kéri (balazske)

Differential Revision: https://reviews.llvm.org/D154701
2023-07-18 16:29:56 +08:00
Yuanfang Chen
632dd6a4ca [Clang] Implements CTAD for aggregates P1816R0 and P2082R1
Differential Revision: https://reviews.llvm.org/D139837
2023-06-29 14:22:24 -07:00
Mariya Podchishchaeva
74fd474eea [clang] Evaluate non-type default template argument when it is required
Before this change a default template argument for a non-type template
parameter was evaluated and checked immediately after it is met by
parser. In some cases it is too early.

Fixes https://github.com/llvm/llvm-project/issues/62224
Fixes https://github.com/llvm/llvm-project/issues/62596

Reviewed By: shafik, erichkeane, cor3ntin

Differential Revision: https://reviews.llvm.org/D150108
2023-05-09 04:21:46 -04:00
Krasimir Georgiev
1689a5d756 [clang] fix an unused variable warning after 9d0b55f0e4ca55d04ee8abfdf021913ea3c30082 2023-04-13 10:03:37 +00:00
Balázs Kéri
9d0b55f0e4 [clang][ASTImporter] Fix import of typedef with unnamed structures
Fix crash in ASTImporter related to import of unnamed structures and typedefs
to these maybe with pointer.
There was a series of problems exposed by https://reviews.llvm.org/D133468
(commit 69a6417406a1b0316a1fa6aeb63339d0e1d2abbd) in the ASTImporter breaking
cross-translation unit analysis. This change fixes one of the problems exposed
by that change for importing unnamed structures. The problem was
discovered when running clang static analysis on open source projects
using cross-translation unit analysis.

Simple test command. Produces crash without change, passes all tests
with change.

```
ninja ASTTests && ./tools/clang/unittests/AST/ASTTests
  --gtest_filter="*/*ImportAnonymousStruct/0"
```

Formatted crash stack:

```
ASTTests: <root>/clang/lib/AST/ASTContext.cpp:4787:
  clang::QualType clang::ASTContext::getTypedefType(const clang::TypedefNameDecl*,
  clang::QualType) const: Assertion `hasSameType(Decl->getUnderlyingType(), Underlying)' failed.
...
 #9 <addr> clang::ASTContext::getTypedefType(clang::TypedefNameDecl const*, clang::QualType) const
             <root>/clang/lib/AST/ASTContext.cpp:4789:26
             <root>/clang/lib/AST/ASTImporter.cpp:1374:71
             <root>/tools/clang/include/clang/AST/TypeNodes.inc:75:1
             <root>/clang/lib/AST/ASTImporter.cpp:8663:8
```

Reviewed By: donat.nagy

Differential Revision: https://reviews.llvm.org/D145868
2023-04-13 09:25:12 +02:00
Balázs Kéri
1a35893d2a [clang][ASTImporter] Import typedefs to distinct records as distinct nodes.
When a typedef node is imported, ASTImporter should not find an existing similar
typedef node for it that comes from different context (translation unit or scope).
This should avoid a situation where an existing typedef declaration is returned
at import of a typedef, but the underlying type was already imported as a new
type object.

Reviewed By: vabridgers

Differential Revision: https://reviews.llvm.org/D145479
2023-03-27 17:58:32 +02:00
Pavel Kosov
88e5206f2c Reland [clang][ASTImport] Add support for import of empty records
Patch represents the clang part of changes in D143347

Reviewed By: balazske

Differential Revision: https://reviews.llvm.org/D145057

~~

Huawei RRI, OS Lab
2023-03-21 17:26:36 +03:00
Pavel Kosov
fa326c2191 Revert "[clang][ASTImport] Add support for import of empty records"
This reverts commit 21cd04c46fe0a2bee224899f56518a09bce5306e.
2023-03-20 18:20:41 +03:00
Pavel Kosov
21cd04c46f [clang][ASTImport] Add support for import of empty records
Patch represents the clang part of changes in D143347

Reviewed By: balazske

Differential Revision: https://reviews.llvm.org/D145057
2023-03-20 17:33:04 +03:00
Ilya Karapsin
2147e940e8 Add __builtin_FILE_NAME()
Add '__builtin_FILE_NAME()', which expands to the filename because the
full path is not always needed. It corresponds to the '__FILE_NAME__'
predefined macro and is consistent with the other '__builin' functions
added for predefined macros.

Differential Revision: https://reviews.llvm.org/D144878
2023-03-17 09:52:41 -04:00
Balázs Kéri
29a4ed80bb [clang][ASTImporter] Add VaList declaration to lookup table.
The declaration of __builtin_va_list seems to be handled specially
by ASTContext and/or Sema. The normal AST traversal probably can
not find it, therefore it is not added to ASTImporterLookupTable.
If it is not added, errors can occur because a duplicated
VaList declaration is created at import. To fix the problem the
VaList declaration is added manually to ASTImporterLookupTable
at construction.
In special cases this declaration is inside a "invisible" 'std'
namespace that behaves the same way. This namespace must be added
to the table too.

Reviewed By: vabridgers, donat.nagy

Differential Revision: https://reviews.llvm.org/D144273
2023-03-06 09:32:02 +01:00
Balázs Kéri
27ab138c69 [clang][ASTImporter] Import TemplateName correctly
This is a fix for a problem when multiple template
specializations are created by ASTImporter for the
same specialization. The problem happens if a
TemplateName is imported that points to a template
delcaration (for a template template argument)
(specialization) that has multiple instances in the
declaration chain. If two TemplateName objects contain
different pointers to a template specialization,
these TemplateName objects will have different checksum
even if they point into the same declaration chain.
The problem is fixed if the canonical declaration is used.

Reviewed By: vabridgers, donat.nagy

Differential Revision: https://reviews.llvm.org/D144622
2023-03-03 09:16:43 +01:00
Balázs Kéri
feba03340c [clang][ASTImporter] Improve import of InjectedClassNameType.
During AST import multiple different InjectedClassNameType objects
could be created for a single class template. This can cause problems
and failed assertions when these types are compared and found to be
not the same (because the instance is different and there is no
canonical type).
The import of this type does not use the factory method in ASTContext,
probably because the preconditions are not fulfilled at that state.
The fix tries to make the code in ASTImporter work more like the code
in ASTContext::getInjectedClassNameType. If a type is stored at the
Decl or previous Decl object, it is reused instead of creating a new
one. This avoids crash at least a part of the cases.

Reviewed By: gamesh411, donat.nagy, vabridgers

Differential Revision: https://reviews.llvm.org/D140562
2023-03-01 09:26:10 +01:00
Balázs Kéri
e31ee6417c [clang][ASTImporter] Handle UsingType in friend declarations.
ASTImporterLookupTable did not handle correctly friend declarations
where the friend type is an UsingType (type of a declaration that
comes from an using-declaration). The problem is fixed by handling
it in the same way as a friend with TypedefType.

Reviewed By: steakhal

Differential Revision: https://reviews.llvm.org/D142607
2023-01-30 10:06:11 +01:00