Skip to content

Commit dce9ce0

Browse files
SC llvm teamSC llvm team
authored andcommitted
Merged main:5bff905c0de5 into amd-gfx:edb7917766d3
Local branch amd-gfx edb7917 Merged main:c17735053b22 into amd-gfx:b78ac982af36 Remote branch main 5bff905 [lldb][NFCI] Remove unused method TypeCategoryMap::Get(uint32_t, ValueSP &)
2 parents edb7917 + 5bff905 commit dce9ce0

File tree

81 files changed

+1877
-800
lines changed

Some content is hidden

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

81 files changed

+1877
-800
lines changed

clang/lib/AST/ExprConstant.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3463,8 +3463,7 @@ static APSInt extractStringLiteralCharacter(EvalInfo &Info, const Expr *Lit,
34633463
assert(CAT && "string literal isn't an array");
34643464
QualType CharType = CAT->getElementType();
34653465
assert(CharType->isIntegerType() && "unexpected character type");
3466-
3467-
APSInt Value(S->getCharByteWidth() * Info.Ctx.getCharWidth(),
3466+
APSInt Value(Info.Ctx.getTypeSize(CharType),
34683467
CharType->isUnsignedIntegerType());
34693468
if (Index < S->getLength())
34703469
Value = S->getCodeUnit(Index);
@@ -3487,7 +3486,7 @@ static void expandStringLiteral(EvalInfo &Info, const StringLiteral *S,
34873486
unsigned Elts = CAT->getSize().getZExtValue();
34883487
Result = APValue(APValue::UninitArray(),
34893488
std::min(S->getLength(), Elts), Elts);
3490-
APSInt Value(S->getCharByteWidth() * Info.Ctx.getCharWidth(),
3489+
APSInt Value(Info.Ctx.getTypeSize(CharType),
34913490
CharType->isUnsignedIntegerType());
34923491
if (Result.hasArrayFiller())
34933492
Result.getArrayFiller() = APValue(Value);

clang/lib/AST/TextNodeDumper.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "clang/AST/DeclOpenMP.h"
1717
#include "clang/AST/DeclTemplate.h"
1818
#include "clang/AST/LocInfoType.h"
19+
#include "clang/AST/NestedNameSpecifier.h"
1920
#include "clang/AST/Type.h"
2021
#include "clang/Basic/Module.h"
2122
#include "clang/Basic/SourceManager.h"
@@ -792,11 +793,11 @@ void clang::TextNodeDumper::dumpNestedNameSpecifier(const NestedNameSpecifier *N
792793
OS << " '" << NNS->getAsIdentifier()->getName() << "'";
793794
break;
794795
case NestedNameSpecifier::Namespace:
795-
OS << " Namespace";
796+
OS << " "; // "Namespace" is printed as the decl kind.
796797
dumpBareDeclRef(NNS->getAsNamespace());
797798
break;
798799
case NestedNameSpecifier::NamespaceAlias:
799-
OS << " NamespaceAlias";
800+
OS << " "; // "NamespaceAlias" is printed as the decl kind.
800801
dumpBareDeclRef(NNS->getAsNamespaceAlias());
801802
break;
802803
case NestedNameSpecifier::TypeSpec:

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -927,8 +927,8 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
927927
// configure the pipeline.
928928
OptimizationLevel Level = mapToLevel(CodeGenOpts);
929929

930-
bool IsThinLTO = CodeGenOpts.PrepareForThinLTO;
931-
bool IsLTO = CodeGenOpts.PrepareForLTO;
930+
const bool PrepareForThinLTO = CodeGenOpts.PrepareForThinLTO;
931+
const bool PrepareForLTO = CodeGenOpts.PrepareForLTO;
932932

933933
if (LangOpts.ObjCAutoRefCount) {
934934
PB.registerPipelineStartEPCallback(
@@ -1017,14 +1017,13 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
10171017
});
10181018
}
10191019

1020-
bool IsThinOrUnifiedLTO = IsThinLTO || (IsLTO && CodeGenOpts.UnifiedLTO);
10211020
if (CodeGenOpts.FatLTO) {
1022-
MPM = PB.buildFatLTODefaultPipeline(Level, IsThinOrUnifiedLTO,
1023-
IsThinOrUnifiedLTO ||
1021+
MPM = PB.buildFatLTODefaultPipeline(Level, PrepareForThinLTO,
1022+
PrepareForThinLTO ||
10241023
shouldEmitRegularLTOSummary());
1025-
} else if (IsThinOrUnifiedLTO) {
1024+
} else if (PrepareForThinLTO) {
10261025
MPM = PB.buildThinLTOPreLinkDefaultPipeline(Level);
1027-
} else if (IsLTO) {
1026+
} else if (PrepareForLTO) {
10281027
MPM = PB.buildLTOPreLinkDefaultPipeline(Level);
10291028
} else {
10301029
MPM = PB.buildPerModuleDefaultPipeline(Level);
@@ -1081,12 +1080,9 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
10811080
if (CodeGenOpts.FatLTO) {
10821081
// Set module flags, like EnableSplitLTOUnit and UnifiedLTO, since FatLTO
10831082
// uses a different action than Backend_EmitBC or Backend_EmitLL.
1084-
bool IsThinOrUnifiedLTO =
1085-
CodeGenOpts.PrepareForThinLTO ||
1086-
(CodeGenOpts.PrepareForLTO && CodeGenOpts.UnifiedLTO);
10871083
if (!TheModule->getModuleFlag("ThinLTO"))
10881084
TheModule->addModuleFlag(Module::Error, "ThinLTO",
1089-
uint32_t(IsThinOrUnifiedLTO));
1085+
uint32_t(CodeGenOpts.PrepareForThinLTO));
10901086
if (!TheModule->getModuleFlag("EnableSplitLTOUnit"))
10911087
TheModule->addModuleFlag(Module::Error, "EnableSplitLTOUnit",
10921088
uint32_t(CodeGenOpts.EnableSplitLTOUnit));

clang/lib/Sema/TreeTransform.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6860,6 +6860,7 @@ QualType TreeTransform<Derived>::TransformAutoType(TypeLocBuilder &TLB,
68606860
AutoTypeLoc NewTL = TLB.push<AutoTypeLoc>(Result);
68616861
NewTL.setNameLoc(TL.getNameLoc());
68626862
NewTL.setRParenLoc(TL.getRParenLoc());
6863+
NewTL.setConceptReference(nullptr);
68636864

68646865
if (T->isConstrained()) {
68656866
DeclarationNameInfo DNI = DeclarationNameInfo(

clang/test/AST/ast-dump-decl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,7 @@ namespace TestUsingDecl {
740740
}
741741
// CHECK: NamespaceDecl{{.*}} TestUsingDecl
742742
// CHECK-NEXT: UsingDecl{{.*}} testUsingDecl::i
743-
// CHECK-NEXT: | `-NestedNameSpecifier NamespaceNamespace 0x{{.*}} 'testUsingDecl
743+
// CHECK-NEXT: | `-NestedNameSpecifier Namespace 0x{{.*}} 'testUsingDecl
744744
// CHECK-NEXT: UsingShadowDecl{{.*}} Var{{.*}} 'i' 'int'
745745

746746
namespace testUnresolvedUsing {

clang/test/AST/ast-dump-openmp-begin-declare-variant_namespace_1.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,20 +114,20 @@ int main() {
114114
// CHECK-NEXT: | | |-CallExpr [[ADDR_47:0x[a-z0-9]*]] <col:10, col:17> 'int'
115115
// CHECK-NEXT: | | | `-ImplicitCastExpr [[ADDR_48:0x[a-z0-9]*]] <col:10, col:13> 'int (*)({{.*}})' <FunctionToPointerDecay>
116116
// CHECK-NEXT: | | | `-DeclRefExpr [[ADDR_49:0x[a-z0-9]*]] <col:10, col:13> 'int ({{.*}})' {{.*}}Function [[ADDR_1]] 'foo' 'int ({{.*}})'
117-
// CHECK-NEXT: | | | `-NestedNameSpecifier NamespaceNamespace [[ADDR_0]] 'A'
117+
// CHECK-NEXT: | | | `-NestedNameSpecifier Namespace [[ADDR_0]] 'A'
118118
// CHECK-NEXT: | | `-PseudoObjectExpr [[ADDR_50:0x[a-z0-9]*]] <col:21, col:28> 'int'
119119
// CHECK-NEXT: | | |-CallExpr [[ADDR_51:0x[a-z0-9]*]] <col:21, col:28> 'int'
120120
// CHECK-NEXT: | | | `-ImplicitCastExpr [[ADDR_52:0x[a-z0-9]*]] <col:21, col:24> 'int (*)({{.*}})' <FunctionToPointerDecay>
121121
// CHECK-NEXT: | | | `-DeclRefExpr [[ADDR_53:0x[a-z0-9]*]] <col:21, col:24> 'int ({{.*}})' {{.*}}Function [[ADDR_6]] 'bar' 'int ({{.*}})'
122-
// CHECK-NEXT: | | | `-NestedNameSpecifier NamespaceNamespace [[ADDR_31]] 'B'
122+
// CHECK-NEXT: | | | `-NestedNameSpecifier Namespace [[ADDR_31]] 'B'
123123
// CHECK-NEXT: | | `-CallExpr [[ADDR_54:0x[a-z0-9]*]] <line:34:1, line:50:28> 'int'
124124
// CHECK-NEXT: | | `-ImplicitCastExpr [[ADDR_55:0x[a-z0-9]*]] <line:34:1> 'int (*)({{.*}})' <FunctionToPointerDecay>
125125
// CHECK-NEXT: | | `-DeclRefExpr [[ADDR_11]] <col:1> 'int ({{.*}})' Function [[ADDR_12]] 'bar[implementation={vendor(llvm)}]' 'int ({{.*}})'
126126
// CHECK-NEXT: | `-PseudoObjectExpr [[ADDR_56:0x[a-z0-9]*]] <line:50:32, col:39> 'int'
127127
// CHECK-NEXT: | |-CallExpr [[ADDR_57:0x[a-z0-9]*]] <col:32, col:39> 'int'
128128
// CHECK-NEXT: | | `-ImplicitCastExpr [[ADDR_58:0x[a-z0-9]*]] <col:32, col:35> 'int (*)({{.*}})' <FunctionToPointerDecay>
129129
// CHECK-NEXT: | | `-DeclRefExpr [[ADDR_59:0x[a-z0-9]*]] <col:32, col:35> 'int ({{.*}})' {{.*}}Function [[ADDR_14]] 'baz' 'int ({{.*}})'
130-
// CHECK-NEXT: | | `-NestedNameSpecifier NamespaceNamespace [[ADDR_13]] 'C'
130+
// CHECK-NEXT: | | `-NestedNameSpecifier Namespace [[ADDR_13]] 'C'
131131
// CHECK-NEXT: | `-CallExpr [[ADDR_60:0x[a-z0-9]*]] <line:42:1, line:50:39> 'int'
132132
// CHECK-NEXT: | `-ImplicitCastExpr [[ADDR_61:0x[a-z0-9]*]] <line:42:1> 'int (*)({{.*}})' <FunctionToPointerDecay>
133133
// CHECK-NEXT: | `-DeclRefExpr [[ADDR_19]] <col:1> 'int ({{.*}})' Function [[ADDR_20]] 'baz[implementation={vendor(llvm)}]' 'int ({{.*}})'

clang/test/AST/ast-dump-using.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ struct S;
66
namespace b {
77
using a::S;
88
// CHECK: UsingDecl {{.*}} a::S
9-
// CHECK-NEXT: | `-NestedNameSpecifier NamespaceNamespace {{.*}} 'a'
9+
// CHECK-NEXT: | `-NestedNameSpecifier Namespace {{.*}} 'a'
1010
// CHECK-NEXT: UsingShadowDecl {{.*}} implicit CXXRecord {{.*}} 'S'
1111
// CHECK-NEXT: `-RecordType {{.*}} 'a::S'
1212
typedef S f; // to dump the introduced type

flang/lib/Lower/Bridge.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,6 +1308,30 @@ class FirConverter : public Fortran::lower::AbstractConverter {
13081308
return fir::factory::CharacterExprHelper{*builder, loc}
13091309
.createEmboxChar(x.getBuffer(), x.getLen());
13101310
},
1311+
[&](const fir::MutableBoxValue &x) -> mlir::Value {
1312+
mlir::Value resultRef = resultSymBox.getAddr();
1313+
mlir::Value load = builder->create<fir::LoadOp>(loc, resultRef);
1314+
unsigned rank = x.rank();
1315+
if (x.isAllocatable() && rank > 0) {
1316+
// ALLOCATABLE array result must have default lower bounds.
1317+
// At the call site the result box of a function reference
1318+
// might be considered having default lower bounds, but
1319+
// the runtime box should probably comply with this assumption
1320+
// as well. If the result box has proper lbounds in runtime,
1321+
// this may improve the debugging experience of Fortran apps.
1322+
// We may consider removing this, if the overhead of setting
1323+
// default lower bounds is too big.
1324+
mlir::Value one =
1325+
builder->createIntegerConstant(loc, builder->getIndexType(), 1);
1326+
llvm::SmallVector<mlir::Value> lbounds{rank, one};
1327+
auto shiftTy = fir::ShiftType::get(builder->getContext(), rank);
1328+
mlir::Value shiftOp =
1329+
builder->create<fir::ShiftOp>(loc, shiftTy, lbounds);
1330+
load = builder->create<fir::ReboxOp>(
1331+
loc, load.getType(), load, shiftOp, /*slice=*/mlir::Value{});
1332+
}
1333+
return load;
1334+
},
13111335
[&](const auto &) -> mlir::Value {
13121336
mlir::Value resultRef = resultSymBox.getAddr();
13131337
mlir::Type resultType = genType(resultSym);
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
! RUN: bbc -emit-hlfir --polymorphic-type -I nowhere %s -o - | FileCheck %s
2+
3+
! Test allocatable return.
4+
! Allocatable arrays must have default runtime lbounds after the return.
5+
6+
function test_alloc_return_scalar
7+
real, allocatable :: test_alloc_return_scalar
8+
allocate(test_alloc_return_scalar)
9+
end function test_alloc_return_scalar
10+
! CHECK-LABEL: func.func @_QPtest_alloc_return_scalar() -> !fir.box<!fir.heap<f32>> {
11+
! CHECK: %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.heap<f32>> {bindc_name = "test_alloc_return_scalar", uniq_name = "_QFtest_alloc_return_scalarEtest_alloc_return_scalar"}
12+
! CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_alloc_return_scalarEtest_alloc_return_scalar"} : (!fir.ref<!fir.box<!fir.heap<f32>>>) -> (!fir.ref<!fir.box<!fir.heap<f32>>>, !fir.ref<!fir.box<!fir.heap<f32>>>)
13+
! CHECK: %[[VAL_6:.*]] = fir.load %[[VAL_3]]#1 : !fir.ref<!fir.box<!fir.heap<f32>>>
14+
! CHECK: return %[[VAL_6]] : !fir.box<!fir.heap<f32>>
15+
! CHECK: }
16+
17+
function test_alloc_return_array
18+
real, allocatable :: test_alloc_return_array(:)
19+
allocate(test_alloc_return_array(7:8))
20+
end function test_alloc_return_array
21+
! CHECK-LABEL: func.func @_QPtest_alloc_return_array() -> !fir.box<!fir.heap<!fir.array<?xf32>>> {
22+
! CHECK: %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?xf32>>> {bindc_name = "test_alloc_return_array", uniq_name = "_QFtest_alloc_return_arrayEtest_alloc_return_array"}
23+
! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_0]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_alloc_return_arrayEtest_alloc_return_array"} : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>) -> (!fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>)
24+
! CHECK: %[[VAL_19:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>
25+
! CHECK: %[[VAL_20:.*]] = arith.constant 1 : index
26+
! CHECK: %[[VAL_21:.*]] = fir.shift %[[VAL_20]] : (index) -> !fir.shift<1>
27+
! CHECK: %[[VAL_22:.*]] = fir.rebox %[[VAL_19]](%[[VAL_21]]) : (!fir.box<!fir.heap<!fir.array<?xf32>>>, !fir.shift<1>) -> !fir.box<!fir.heap<!fir.array<?xf32>>>
28+
! CHECK: return %[[VAL_22]] : !fir.box<!fir.heap<!fir.array<?xf32>>>
29+
! CHECK: }
30+
31+
function test_alloc_return_char_scalar
32+
character(3), allocatable :: test_alloc_return_char_scalar
33+
allocate(test_alloc_return_char_scalar)
34+
end function test_alloc_return_char_scalar
35+
! CHECK-LABEL: func.func @_QPtest_alloc_return_char_scalar() -> !fir.box<!fir.heap<!fir.char<1,3>>> {
36+
! CHECK: %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.heap<!fir.char<1,3>>> {bindc_name = "test_alloc_return_char_scalar", uniq_name = "_QFtest_alloc_return_char_scalarEtest_alloc_return_char_scalar"}
37+
! CHECK: %[[VAL_1:.*]] = arith.constant 3 : index
38+
! CHECK: %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_0]] typeparams %[[VAL_1]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_alloc_return_char_scalarEtest_alloc_return_char_scalar"} : (!fir.ref<!fir.box<!fir.heap<!fir.char<1,3>>>>, index) -> (!fir.ref<!fir.box<!fir.heap<!fir.char<1,3>>>>, !fir.ref<!fir.box<!fir.heap<!fir.char<1,3>>>>)
39+
! CHECK: %[[VAL_7:.*]] = fir.load %[[VAL_4]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.char<1,3>>>>
40+
! CHECK: return %[[VAL_7]] : !fir.box<!fir.heap<!fir.char<1,3>>>
41+
! CHECK: }
42+
43+
function test_alloc_return_char_array
44+
character(3), allocatable :: test_alloc_return_char_array(:)
45+
allocate(test_alloc_return_char_array(7:8))
46+
end function test_alloc_return_char_array
47+
! CHECK-LABEL: func.func @_QPtest_alloc_return_char_array() -> !fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>> {
48+
! CHECK: %[[VAL_0:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>> {bindc_name = "test_alloc_return_char_array", uniq_name = "_QFtest_alloc_return_char_arrayEtest_alloc_return_char_array"}
49+
! CHECK: %[[VAL_1:.*]] = arith.constant 3 : index
50+
! CHECK: %[[VAL_6:.*]]:2 = hlfir.declare %[[VAL_0]] typeparams %[[VAL_1]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_alloc_return_char_arrayEtest_alloc_return_char_array"} : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>>, index) -> (!fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>>)
51+
! CHECK: %[[VAL_20:.*]] = fir.load %[[VAL_6]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>>
52+
! CHECK: %[[VAL_21:.*]] = arith.constant 1 : index
53+
! CHECK: %[[VAL_22:.*]] = fir.shift %[[VAL_21]] : (index) -> !fir.shift<1>
54+
! CHECK: %[[VAL_23:.*]] = fir.rebox %[[VAL_20]](%[[VAL_22]]) : (!fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>, !fir.shift<1>) -> !fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>
55+
! CHECK: return %[[VAL_23]] : !fir.box<!fir.heap<!fir.array<?x!fir.char<1,3>>>>
56+
! CHECK: }
57+
58+
function test_alloc_return_poly_scalar
59+
type t
60+
end type t
61+
class(*), allocatable :: test_alloc_return_poly_scalar
62+
allocate(t :: test_alloc_return_poly_scalar)
63+
end function test_alloc_return_poly_scalar
64+
! CHECK-LABEL: func.func @_QPtest_alloc_return_poly_scalar() -> !fir.class<!fir.heap<none>> {
65+
! CHECK: %[[VAL_0:.*]] = fir.alloca !fir.class<!fir.heap<none>> {bindc_name = "test_alloc_return_poly_scalar", uniq_name = "_QFtest_alloc_return_poly_scalarEtest_alloc_return_poly_scalar"}
66+
! CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_alloc_return_poly_scalarEtest_alloc_return_poly_scalar"} : (!fir.ref<!fir.class<!fir.heap<none>>>) -> (!fir.ref<!fir.class<!fir.heap<none>>>, !fir.ref<!fir.class<!fir.heap<none>>>)
67+
! CHECK: %[[VAL_17:.*]] = fir.load %[[VAL_3]]#1 : !fir.ref<!fir.class<!fir.heap<none>>>
68+
! CHECK: return %[[VAL_17]] : !fir.class<!fir.heap<none>>
69+
! CHECK: }
70+
71+
function test_alloc_return_poly_array
72+
type t
73+
end type t
74+
class(*), allocatable :: test_alloc_return_poly_array(:)
75+
allocate(t :: test_alloc_return_poly_array(7:8))
76+
end function test_alloc_return_poly_array
77+
! CHECK-LABEL: func.func @_QPtest_alloc_return_poly_array() -> !fir.class<!fir.heap<!fir.array<?xnone>>> {
78+
! CHECK: %[[VAL_0:.*]] = fir.alloca !fir.class<!fir.heap<!fir.array<?xnone>>> {bindc_name = "test_alloc_return_poly_array", uniq_name = "_QFtest_alloc_return_poly_arrayEtest_alloc_return_poly_array"}
79+
! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_0]] {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QFtest_alloc_return_poly_arrayEtest_alloc_return_poly_array"} : (!fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>) -> (!fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>, !fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>)
80+
! CHECK: %[[VAL_26:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>
81+
! CHECK: %[[VAL_27:.*]] = arith.constant 1 : index
82+
! CHECK: %[[VAL_28:.*]] = fir.shift %[[VAL_27]] : (index) -> !fir.shift<1>
83+
! CHECK: %[[VAL_29:.*]] = fir.rebox %[[VAL_26]](%[[VAL_28]]) : (!fir.class<!fir.heap<!fir.array<?xnone>>>, !fir.shift<1>) -> !fir.class<!fir.heap<!fir.array<?xnone>>>
84+
! CHECK: return %[[VAL_29]] : !fir.class<!fir.heap<!fir.array<?xnone>>>
85+
! CHECK: }

0 commit comments

Comments
 (0)