Skip to content

Commit a51febd

Browse files
committed
Merge branch 'main' into users/kparzysz/spr/i01-flang-iterator-modifier
2 parents 44c9884 + 40ea92c commit a51febd

File tree

376 files changed

+5938
-10766
lines changed

Some content is hidden

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

376 files changed

+5938
-10766
lines changed

clang/lib/Sema/SemaOpenMP.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18335,7 +18335,8 @@ static bool checkOMPArraySectionConstantForReduction(
1833518335
return false;
1833618336

1833718337
// This is an array subscript which has implicit length 1!
18338-
ArraySizes.push_back(llvm::APSInt::get(1));
18338+
llvm::APSInt ConstantOne = llvm::APSInt::get(1);
18339+
ArraySizes.push_back(ConstantOne);
1833918340
} else {
1834018341
Expr::EvalResult Result;
1834118342
if (!Length->EvaluateAsInt(Result, Context))
@@ -18354,7 +18355,8 @@ static bool checkOMPArraySectionConstantForReduction(
1835418355
if (!SingleElement) {
1835518356
while (const auto *TempASE = dyn_cast<ArraySubscriptExpr>(Base)) {
1835618357
// Has implicit length 1!
18357-
ArraySizes.push_back(llvm::APSInt::get(1));
18358+
llvm::APSInt ConstantOne = llvm::APSInt::get(1);
18359+
ArraySizes.push_back(ConstantOne);
1835818360
Base = TempASE->getBase()->IgnoreParenImpCasts();
1835918361
}
1836018362
}

clang/test/CXX/drs/cwg9xx.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,56 @@ struct B : A {
9393
} // namespace example2
9494
} // namespace cwg952
9595

96+
namespace cwg960 { // cwg960: 3.0
97+
struct a {};
98+
class A {
99+
#if __cplusplus >= 201103L
100+
// Check lvalue ref vs rvalue ref vs pointer.
101+
virtual a& rvalue_ref();
102+
virtual a&& lvalue_ref();
103+
virtual a& rvalue_vs_lvalue_ref(); // #cwg960-A-rvalue_vs_lvalue_ref
104+
virtual a&& lvalue_vs_rvalue_ref(); // #cwg960-A-lvalue_vs_rvalue_ref
105+
virtual a& rvalue_ref_vs_pointer(); // #cwg960-A-rvalue_ref_vs_pointer
106+
virtual a* pointer_vs_rvalue_ref(); // #cwg960-A-pointer_vs_rvalue_ref
107+
virtual a&& lvalue_ref_vs_pointer(); // #cwg960-A-lvalue_ref_vs_pointer
108+
virtual a* pointer_vs_lvalue_ref(); // #cwg960-A-pointer_vs_lvalue_ref
109+
#endif
110+
};
111+
112+
class B : A {
113+
#if __cplusplus >= 201103L
114+
// Check lvalue ref vs rvalue ref vs pointer.
115+
a& rvalue_ref() override;
116+
a&& lvalue_ref() override;
117+
118+
a&& rvalue_vs_lvalue_ref() override;
119+
// since-cxx11-error@-1 {{virtual function 'rvalue_vs_lvalue_ref' has a different return type ('a &&') than the function it overrides (which has return type 'a &')}}
120+
// since-cxx11-note@#cwg960-A-rvalue_vs_lvalue_ref {{overridden virtual function is here}}
121+
122+
a& lvalue_vs_rvalue_ref() override;
123+
// since-cxx11-error@-1 {{virtual function 'lvalue_vs_rvalue_ref' has a different return type ('a &') than the function it overrides (which has return type 'a &&')}}
124+
// since-cxx11-note@#cwg960-A-lvalue_vs_rvalue_ref {{overridden virtual function is here}}
125+
126+
a* rvalue_ref_vs_pointer() override;
127+
// since-cxx11-error@-1 {{virtual function 'rvalue_ref_vs_pointer' has a different return type ('a *') than the function it overrides (which has return type 'a &')}}
128+
// since-cxx11-note@#cwg960-A-rvalue_ref_vs_pointer {{overridden virtual function is here}}
129+
130+
a& pointer_vs_rvalue_ref() override;
131+
// since-cxx11-error@-1 {{virtual function 'pointer_vs_rvalue_ref' has a different return type ('a &') than the function it overrides (which has return type 'a *')}}
132+
// since-cxx11-note@#cwg960-A-pointer_vs_rvalue_ref {{overridden virtual function is here}}
133+
134+
a* lvalue_ref_vs_pointer() override;
135+
// since-cxx11-error@-1 {{virtual function 'lvalue_ref_vs_pointer' has a different return type ('a *') than the function it overrides (which has return type 'a &&')}}
136+
// since-cxx11-note@#cwg960-A-lvalue_ref_vs_pointer {{overridden virtual function is here}}
137+
138+
a&& pointer_vs_lvalue_ref() override;
139+
// since-cxx11-error@-1 {{virtual function 'pointer_vs_lvalue_ref' has a different return type ('a &&') than the function it overrides (which has return type 'a *')}}
140+
// since-cxx11-note@#cwg960-A-pointer_vs_lvalue_ref {{overridden virtual function is here}}
141+
#endif
142+
};
143+
144+
} // namespace cwg960
145+
96146
namespace cwg974 { // cwg974: yes
97147
#if __cplusplus >= 201103L
98148
void test() {

clang/www/cxx_dr_status.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5579,7 +5579,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2>
55795579
<td><a href="https://cplusplus.github.io/CWG/issues/960.html">960</a></td>
55805580
<td>CD2</td>
55815581
<td>Covariant functions and lvalue/rvalue references</td>
5582-
<td class="unknown" align="center">Unknown</td>
5582+
<td class="full" align="center">Clang 3.0</td>
55835583
</tr>
55845584
<tr id="961">
55855585
<td><a href="https://cplusplus.github.io/CWG/issues/961.html">961</a></td>

compiler-rt/lib/interception/interception_win.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,7 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
769769

770770
switch (*(u32*)(address)) {
771771
case 0x1ab60f44: // 44 0f b6 1a : movzx r11d, BYTE PTR [rdx]
772+
return 4;
772773
case 0x24448b48: // 48 8b 44 24 XX : mov rax, QWORD ptr [rsp + XX]
773774
case 0x246c8948: // 48 89 6C 24 XX : mov QWORD ptr [rsp + XX], rbp
774775
case 0x245c8948: // 48 89 5c 24 XX : mov QWORD PTR [rsp + XX], rbx

compiler-rt/lib/rtsan/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ set(RTSAN_CXX_SOURCES
55
rtsan_context.cpp
66
rtsan_diagnostics.cpp
77
rtsan_flags.cpp
8-
rtsan_interceptors.cpp
8+
rtsan_interceptors_posix.cpp
99
rtsan_stats.cpp
1010
rtsan_suppressions.cpp
1111
)

compiler-rt/lib/rtsan/tests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ set(RTSAN_UNITTEST_CFLAGS
1616

1717
set(RTSAN_INST_TEST_SOURCES
1818
rtsan_test_functional.cpp
19-
rtsan_test_interceptors.cpp
19+
rtsan_test_interceptors_posix.cpp
2020
rtsan_test_main.cpp)
2121

2222
set(RTSAN_NOINST_TEST_SOURCES

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2209,6 +2209,12 @@ static void genCompositeDistributeParallelDoSimd(
22092209
genSimdClauses(converter, semaCtx, simdItem->clauses, loc, simdClauseOps,
22102210
simdReductionSyms);
22112211

2212+
// TODO: Remove this after omp.simd reductions on composite constructs are
2213+
// supported.
2214+
simdClauseOps.reductionVars.clear();
2215+
simdClauseOps.reductionByref.clear();
2216+
simdClauseOps.reductionSyms.clear();
2217+
22122218
mlir::omp::LoopNestOperands loopNestClauseOps;
22132219
llvm::SmallVector<const semantics::Symbol *> iv;
22142220
genLoopNestClauses(converter, semaCtx, eval, simdItem->clauses, loc,
@@ -2230,9 +2236,7 @@ static void genCompositeDistributeParallelDoSimd(
22302236
wsloopOp.setComposite(/*val=*/true);
22312237

22322238
EntryBlockArgs simdArgs;
2233-
// TODO: Add private syms and vars.
2234-
simdArgs.reduction.syms = simdReductionSyms;
2235-
simdArgs.reduction.vars = simdClauseOps.reductionVars;
2239+
// TODO: Add private and reduction syms and vars.
22362240
auto simdOp =
22372241
genWrapperOp<mlir::omp::SimdOp>(converter, loc, simdClauseOps, simdArgs);
22382242
simdOp.setComposite(/*val=*/true);
@@ -2325,6 +2329,12 @@ static void genCompositeDoSimd(lower::AbstractConverter &converter,
23252329
genSimdClauses(converter, semaCtx, simdItem->clauses, loc, simdClauseOps,
23262330
simdReductionSyms);
23272331

2332+
// TODO: Remove this after omp.simd reductions on composite constructs are
2333+
// supported.
2334+
simdClauseOps.reductionVars.clear();
2335+
simdClauseOps.reductionByref.clear();
2336+
simdClauseOps.reductionSyms.clear();
2337+
23282338
// TODO: Support delayed privatization.
23292339
DataSharingProcessor dsp(converter, semaCtx, simdItem->clauses, eval,
23302340
/*shouldCollectPreDeterminedSymbols=*/true,
@@ -2348,9 +2358,7 @@ static void genCompositeDoSimd(lower::AbstractConverter &converter,
23482358
wsloopOp.setComposite(/*val=*/true);
23492359

23502360
EntryBlockArgs simdArgs;
2351-
// TODO: Add private syms and vars.
2352-
simdArgs.reduction.syms = simdReductionSyms;
2353-
simdArgs.reduction.vars = simdClauseOps.reductionVars;
2361+
// TODO: Add private and reduction syms and vars.
23542362
auto simdOp =
23552363
genWrapperOp<mlir::omp::SimdOp>(converter, loc, simdClauseOps, simdArgs);
23562364
simdOp.setComposite(/*val=*/true);

flang/test/Fir/OpenACC/legalize-data.fir

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: fir-opt -split-input-file --openacc-legalize-data %s | FileCheck %s
1+
// RUN: fir-opt -split-input-file --openacc-legalize-data-values %s | FileCheck %s
22

33
func.func @_QPsub1(%arg0: !fir.ref<i32> {fir.bindc_name = "i"}) {
44
%0:2 = hlfir.declare %arg0 {uniq_name = "_QFsub1Ei"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
@@ -22,3 +22,36 @@ func.func @_QPsub1(%arg0: !fir.ref<i32> {fir.bindc_name = "i"}) {
2222
// CHECK: acc.yield
2323
// CHECK: }
2424
// CHECK: acc.copyout accPtr(%[[COPYIN]] : !fir.ref<i32>) to varPtr(%[[I]]#0 : !fir.ref<i32>) {dataClause = #acc<data_clause acc_copy>, name = "i"}
25+
26+
// -----
27+
28+
func.func @_QPsub1(%arg0: !fir.ref<i32> {fir.bindc_name = "i"}) {
29+
%0:2 = hlfir.declare %arg0 {uniq_name = "_QFsub1Ei"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
30+
%1 = acc.copyin varPtr(%0#0 : !fir.ref<i32>) -> !fir.ref<i32> {dataClause = #acc<data_clause acc_copy>, name = "i"}
31+
acc.data dataOperands(%1 : !fir.ref<i32>) {
32+
%c0_i32 = arith.constant 0 : i32
33+
hlfir.assign %c0_i32 to %0#0 : i32, !fir.ref<i32>
34+
acc.serial {
35+
hlfir.assign %c0_i32 to %0#0 : i32, !fir.ref<i32>
36+
acc.yield
37+
}
38+
acc.terminator
39+
}
40+
acc.copyout accPtr(%1 : !fir.ref<i32>) to varPtr(%0#0 : !fir.ref<i32>) {dataClause = #acc<data_clause acc_copy>, name = "i"}
41+
return
42+
}
43+
44+
// CHECK-LABEL: func.func @_QPsub1
45+
// CHECK-SAME: (%[[ARG0:.*]]: !fir.ref<i32> {fir.bindc_name = "i"})
46+
// CHECK: %[[I:.*]]:2 = hlfir.declare %[[ARG0]] {uniq_name = "_QFsub1Ei"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
47+
// CHECK: %[[COPYIN:.*]] = acc.copyin varPtr(%[[I]]#0 : !fir.ref<i32>) -> !fir.ref<i32> {dataClause = #acc<data_clause acc_copy>, name = "i"}
48+
// CHECK: acc.data dataOperands(%[[COPYIN]] : !fir.ref<i32>) {
49+
// CHECK: %[[C0:.*]] = arith.constant 0 : i32
50+
// CHECK: hlfir.assign %[[C0]] to %0#0 : i32, !fir.ref<i32>
51+
// CHECK: acc.serial {
52+
// CHECK: hlfir.assign %[[C0]] to %[[COPYIN]] : i32, !fir.ref<i32>
53+
// CHECK: acc.yield
54+
// CHECK: }
55+
// CHECK: acc.terminator
56+
// CHECK: }
57+
// CHECK: acc.copyout accPtr(%[[COPYIN]] : !fir.ref<i32>) to varPtr(%[[I]]#0 : !fir.ref<i32>) {dataClause = #acc<data_clause acc_copy>, name = "i"}

0 commit comments

Comments
 (0)