Skip to content

Commit 17654a6

Browse files
committed
Merge branch 'main' into fast_isel_fix
2 parents 394b2b5 + a98466a commit 17654a6

File tree

68 files changed

+1638
-558
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1638
-558
lines changed

clang-tools-extra/docs/clang-tidy/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ An overview of all the command-line options:
287287
FormatStyle - Same as '--format-style'.
288288
HeaderFileExtensions - File extensions to consider to determine if a
289289
given diagnostic is located in a header file.
290-
HeaderFilterRegex - Same as '--header-filter-regex'.
290+
HeaderFilterRegex - Same as '--header-filter'.
291291
ImplementationFileExtensions - File extensions to consider to determine if a
292292
given diagnostic is located in an
293293
implementation file.

clang/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,8 @@ Improvements to Clang's diagnostics
378378

379379
- Clang now emits a diagnostic note at the class declaration when the method definition does not match any declaration (#GH110638).
380380

381+
- Clang now omits warnings for extra parentheses in fold expressions with single expansion (#GH101863).
382+
381383
Improvements to Clang's time-trace
382384
----------------------------------
383385

@@ -471,6 +473,8 @@ Bug Fixes to C++ Support
471473
- Fixed an issue deducing non-type template arguments of reference type. (#GH73460)
472474
- Fixed an issue in constraint evaluation, where type constraints on the lambda expression
473475
containing outer unexpanded parameters were not correctly expanded. (#GH101754)
476+
- Fixes crashes with function template member specializations, and increases
477+
conformance of explicit instantiation behaviour with MSVC. (#GH111266)
474478
- Fixed a bug in constraint expression comparison where the ``sizeof...`` expression was not handled properly
475479
in certain friend declarations. (#GH93099)
476480

clang/include/clang/AST/Expr.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2170,11 +2170,13 @@ class SYCLUniqueStableNameExpr final : public Expr {
21702170
class ParenExpr : public Expr {
21712171
SourceLocation L, R;
21722172
Stmt *Val;
2173+
21732174
public:
21742175
ParenExpr(SourceLocation l, SourceLocation r, Expr *val)
21752176
: Expr(ParenExprClass, val->getType(), val->getValueKind(),
21762177
val->getObjectKind()),
21772178
L(l), R(r), Val(val) {
2179+
ParenExprBits.ProducedByFoldExpansion = false;
21782180
setDependence(computeDependence(this));
21792181
}
21802182

@@ -2206,6 +2208,13 @@ class ParenExpr : public Expr {
22062208
const_child_range children() const {
22072209
return const_child_range(&Val, &Val + 1);
22082210
}
2211+
2212+
bool isProducedByFoldExpansion() const {
2213+
return ParenExprBits.ProducedByFoldExpansion != 0;
2214+
}
2215+
void setIsProducedByFoldExpansion(bool ProducedByFoldExpansion = true) {
2216+
ParenExprBits.ProducedByFoldExpansion = ProducedByFoldExpansion;
2217+
}
22092218
};
22102219

22112220
/// UnaryOperator - This represents the unary-expression's (except sizeof and

clang/include/clang/AST/Stmt.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,18 @@ class alignas(void *) Stmt {
719719
unsigned Kind : 3;
720720
};
721721

722+
class ParenExprBitfields {
723+
friend class ASTStmtReader;
724+
friend class ASTStmtWriter;
725+
friend class ParenExpr;
726+
727+
LLVM_PREFERRED_TYPE(ExprBitfields)
728+
unsigned : NumExprBits;
729+
730+
LLVM_PREFERRED_TYPE(bool)
731+
unsigned ProducedByFoldExpansion : 1;
732+
};
733+
722734
class StmtExprBitfields {
723735
friend class ASTStmtReader;
724736
friend class StmtExpr;
@@ -1241,6 +1253,7 @@ class alignas(void *) Stmt {
12411253
GenericSelectionExprBitfields GenericSelectionExprBits;
12421254
PseudoObjectExprBitfields PseudoObjectExprBits;
12431255
SourceLocExprBitfields SourceLocExprBits;
1256+
ParenExprBitfields ParenExprBits;
12441257

12451258
// GNU Extensions.
12461259
StmtExprBitfields StmtExprBits;
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
InheritParentConfig: true
2+
Checks: >
3+
-misc-const-correctness,
4+
-llvm-header-guard,
5+
bugprone-argument-comment,
6+
bugprone-assert-side-effect,
7+
bugprone-branch-clone,
8+
bugprone-copy-constructor-init,
9+
bugprone-dangling-handle,
10+
bugprone-dynamic-static-initializers,
11+
bugprone-macro-parentheses,
12+
bugprone-macro-repeated-side-effects,
13+
bugprone-misplaced-widening-cast,
14+
bugprone-move-forwarding-reference,
15+
bugprone-multiple-statement-macro,
16+
bugprone-suspicious-semicolon,
17+
bugprone-swapped-arguments,
18+
bugprone-terminating-continue,
19+
bugprone-unused-raii,
20+
bugprone-unused-return-value,
21+
misc-redundant-expression,
22+
misc-static-assert,
23+
misc-unused-using-decls,
24+
modernize-use-bool-literals,
25+
modernize-loop-convert,
26+
modernize-make-unique,
27+
modernize-raw-string-literal,
28+
modernize-use-equals-default,
29+
modernize-use-default-member-init,
30+
modernize-use-emplace,
31+
modernize-use-nullptr,
32+
modernize-use-override,
33+
modernize-use-using,
34+
performance-for-range-copy,
35+
performance-implicit-conversion-in-loop,
36+
performance-inefficient-algorithm,
37+
performance-inefficient-vector-operation,
38+
performance-move-const-arg,
39+
performance-no-automatic-move,
40+
performance-trivially-destructible,
41+
performance-unnecessary-copy-initialization,
42+
performance-unnecessary-value-param,
43+
readability-avoid-const-params-in-decls,
44+
readability-const-return-type,
45+
readability-container-size-empty,
46+
readability-identifier-naming,
47+
readability-inconsistent-declaration-parameter-name,
48+
readability-misleading-indentation,
49+
readability-redundant-control-flow,
50+
readability-redundant-smartptr-get,
51+
readability-simplify-boolean-expr,
52+
readability-simplify-subscript-expr,
53+
readability-use-anyofallof
54+
55+
56+
CheckOptions:
57+
- key: readability-identifier-naming.MemberCase
58+
value: camelBack
59+
- key: readability-identifier-naming.ParameterCase
60+
value: camelBack
61+
- key: readability-identifier-naming.VariableCase
62+
value: camelBack
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
InheritParentConfig: true
2+
Checks: >
3+
-misc-const-correctness,
4+
-llvm-header-guard,
5+
bugprone-argument-comment,
6+
bugprone-assert-side-effect,
7+
bugprone-branch-clone,
8+
bugprone-copy-constructor-init,
9+
bugprone-dangling-handle,
10+
bugprone-dynamic-static-initializers,
11+
bugprone-macro-parentheses,
12+
bugprone-macro-repeated-side-effects,
13+
bugprone-misplaced-widening-cast,
14+
bugprone-move-forwarding-reference,
15+
bugprone-multiple-statement-macro,
16+
bugprone-suspicious-semicolon,
17+
bugprone-swapped-arguments,
18+
bugprone-terminating-continue,
19+
bugprone-unused-raii,
20+
bugprone-unused-return-value,
21+
misc-redundant-expression,
22+
misc-static-assert,
23+
misc-unused-using-decls,
24+
modernize-use-bool-literals,
25+
modernize-loop-convert,
26+
modernize-make-unique,
27+
modernize-raw-string-literal,
28+
modernize-use-equals-default,
29+
modernize-use-default-member-init,
30+
modernize-use-emplace,
31+
modernize-use-nullptr,
32+
modernize-use-override,
33+
modernize-use-using,
34+
performance-for-range-copy,
35+
performance-implicit-conversion-in-loop,
36+
performance-inefficient-algorithm,
37+
performance-inefficient-vector-operation,
38+
performance-move-const-arg,
39+
performance-no-automatic-move,
40+
performance-trivially-destructible,
41+
performance-unnecessary-copy-initialization,
42+
performance-unnecessary-value-param,
43+
readability-avoid-const-params-in-decls,
44+
readability-const-return-type,
45+
readability-container-size-empty,
46+
readability-identifier-naming,
47+
readability-inconsistent-declaration-parameter-name,
48+
readability-misleading-indentation,
49+
readability-redundant-control-flow,
50+
readability-redundant-smartptr-get,
51+
readability-simplify-boolean-expr,
52+
readability-simplify-subscript-expr,
53+
readability-use-anyofallof

clang/lib/CIR/.clang-tidy

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
InheritParentConfig: true
2+
Checks: >
3+
-misc-const-correctness,
4+
-llvm-header-guard,
5+
bugprone-argument-comment,
6+
bugprone-assert-side-effect,
7+
bugprone-branch-clone,
8+
bugprone-copy-constructor-init,
9+
bugprone-dangling-handle,
10+
bugprone-dynamic-static-initializers,
11+
bugprone-macro-parentheses,
12+
bugprone-macro-repeated-side-effects,
13+
bugprone-misplaced-widening-cast,
14+
bugprone-move-forwarding-reference,
15+
bugprone-multiple-statement-macro,
16+
bugprone-suspicious-semicolon,
17+
bugprone-swapped-arguments,
18+
bugprone-terminating-continue,
19+
bugprone-unused-raii,
20+
bugprone-unused-return-value,
21+
misc-redundant-expression,
22+
misc-static-assert,
23+
misc-unused-using-decls,
24+
modernize-use-bool-literals,
25+
modernize-loop-convert,
26+
modernize-make-unique,
27+
modernize-raw-string-literal,
28+
modernize-use-equals-default,
29+
modernize-use-default-member-init,
30+
modernize-use-emplace,
31+
modernize-use-nullptr,
32+
modernize-use-override,
33+
modernize-use-using,
34+
performance-for-range-copy,
35+
performance-implicit-conversion-in-loop,
36+
performance-inefficient-algorithm,
37+
performance-inefficient-vector-operation,
38+
performance-move-const-arg,
39+
performance-no-automatic-move,
40+
performance-trivially-destructible,
41+
performance-unnecessary-copy-initialization,
42+
performance-unnecessary-value-param,
43+
readability-avoid-const-params-in-decls,
44+
readability-const-return-type,
45+
readability-container-size-empty,
46+
readability-identifier-naming,
47+
readability-inconsistent-declaration-parameter-name,
48+
readability-misleading-indentation,
49+
readability-redundant-control-flow,
50+
readability-redundant-smartptr-get,
51+
readability-simplify-boolean-expr,
52+
readability-simplify-subscript-expr,
53+
readability-use-anyofallof
54+
55+
56+
CheckOptions:
57+
- key: readability-identifier-naming.MemberCase
58+
value: camelBack
59+
- key: readability-identifier-naming.ParameterCase
60+
value: camelBack
61+
- key: readability-identifier-naming.VariableCase
62+
value: camelBack

clang/lib/Sema/SemaExpr.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20223,6 +20223,8 @@ void Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) {
2022320223
return;
2022420224

2022520225
Expr *E = ParenE->IgnoreParens();
20226+
if (ParenE->isProducedByFoldExpansion() && ParenE->getSubExpr() == E)
20227+
return;
2022620228

2022720229
if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E))
2022820230
if (opE->getOpcode() == BO_EQ &&

clang/lib/Sema/SemaTemplateInstantiate.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4206,18 +4206,14 @@ Sema::InstantiateClassMembers(SourceLocation PointOfInstantiation,
42064206
if (Function->hasAttr<ExcludeFromExplicitInstantiationAttr>())
42074207
continue;
42084208

4209-
MemberSpecializationInfo *MSInfo =
4210-
Function->getMemberSpecializationInfo();
4211-
assert(MSInfo && "No member specialization information?");
4212-
if (MSInfo->getTemplateSpecializationKind()
4213-
== TSK_ExplicitSpecialization)
4209+
TemplateSpecializationKind PrevTSK =
4210+
Function->getTemplateSpecializationKind();
4211+
if (PrevTSK == TSK_ExplicitSpecialization)
42144212
continue;
42154213

4216-
if (CheckSpecializationInstantiationRedecl(PointOfInstantiation, TSK,
4217-
Function,
4218-
MSInfo->getTemplateSpecializationKind(),
4219-
MSInfo->getPointOfInstantiation(),
4220-
SuppressNew) ||
4214+
if (CheckSpecializationInstantiationRedecl(
4215+
PointOfInstantiation, TSK, Function, PrevTSK,
4216+
Function->getPointOfInstantiation(), SuppressNew) ||
42214217
SuppressNew)
42224218
continue;
42234219

clang/lib/Sema/TreeTransform.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15661,12 +15661,14 @@ TreeTransform<Derived>::TransformCXXFoldExpr(CXXFoldExpr *E) {
1566115661
return true;
1566215662
}
1566315663

15664+
if (ParenExpr *PE = dyn_cast_or_null<ParenExpr>(Result.get()))
15665+
PE->setIsProducedByFoldExpansion();
15666+
1566415667
// If we had no init and an empty pack, and we're not retaining an expansion,
1566515668
// then produce a fallback value or error.
1566615669
if (Result.isUnset())
1566715670
return getDerived().RebuildEmptyCXXFoldExpr(E->getEllipsisLoc(),
1566815671
E->getOperator());
15669-
1567015672
return Result;
1567115673
}
1567215674

0 commit comments

Comments
 (0)