@@ -4789,24 +4789,27 @@ class SILFunctionType final
47894789 using Representation = SILExtInfoBuilder::Representation;
47904790
47914791private:
4792- unsigned NumParameters;
4792+ unsigned NumParameters = 0 ;
47934793
4794- // These are *normal* results if this is not a coroutine and *yield* results
4795- // otherwise.
4796- unsigned NumAnyResults; // Not including the ErrorResult.
4797- unsigned NumAnyIndirectFormalResults; // Subset of NumAnyResults.
4798- unsigned NumPackResults; // Subset of NumAnyIndirectFormalResults.
4794+ // These are *normal* results
4795+ unsigned NumAnyResults = 0 ; // Not including the ErrorResult.
4796+ unsigned NumAnyIndirectFormalResults = 0 ; // Subset of NumAnyResults.
4797+ unsigned NumPackResults = 0 ; // Subset of NumAnyIndirectFormalResults.
4798+ // These are *yield* results
4799+ unsigned NumAnyYieldResults = 0 ; // Not including the ErrorResult.
4800+ unsigned NumAnyIndirectFormalYieldResults = 0 ; // Subset of NumAnyYieldResults.
4801+ unsigned NumPackYieldResults = 0 ; // Subset of NumAnyIndirectFormalYieldResults.
47994802
48004803 // [NOTE: SILFunctionType-layout]
48014804 // The layout of a SILFunctionType in memory is:
48024805 // SILFunctionType
48034806 // SILParameterInfo[NumParameters]
4804- // SILResultInfo[isCoroutine() ? 0 : NumAnyResults]
4807+ // SILResultInfo[NumAnyResults]
48054808 // SILResultInfo? // if hasErrorResult()
4806- // SILYieldInfo[isCoroutine() ? NumAnyResults : 0 ]
4809+ // SILYieldInfo[NumAnyYieldResults ]
48074810 // SubstitutionMap[HasPatternSubs + HasInvocationSubs]
4808- // CanType? // if !isCoro && NumAnyResults > 1, formal result cache
4809- // CanType? // if !isCoro && NumAnyResults > 1, all result cache
4811+ // CanType? // if NumAnyResults > 1, formal result cache
4812+ // CanType? // if NumAnyResults > 1, all result cache
48104813
48114814 CanGenericSignature InvocationGenericSig;
48124815 ProtocolConformanceRef WitnessMethodConformance;
@@ -4845,7 +4848,7 @@ class SILFunctionType final
48454848
48464849 // / Do we have slots for caches of the normal-result tuple type?
48474850 bool hasResultCache () const {
4848- return NumAnyResults > 1 && ! isCoroutine () ;
4851+ return NumAnyResults > 1 ;
48494852 }
48504853
48514854 CanType &getMutableFormalResultsCache () const {
@@ -4945,14 +4948,14 @@ class SILFunctionType final
49454948 ArrayRef<SILYieldInfo> getYields () const {
49464949 return const_cast <SILFunctionType *>(this )->getMutableYields ();
49474950 }
4948- unsigned getNumYields () const { return isCoroutine () ? NumAnyResults : 0 ; }
4951+ unsigned getNumYields () const { return NumAnyYieldResults ; }
49494952
49504953 // / Return the array of all result information. This may contain inter-mingled
49514954 // / direct and indirect results.
49524955 ArrayRef<SILResultInfo> getResults () const {
49534956 return const_cast <SILFunctionType *>(this )->getMutableResults ();
49544957 }
4955- unsigned getNumResults () const { return isCoroutine () ? 0 : NumAnyResults; }
4958+ unsigned getNumResults () const { return NumAnyResults; }
49564959
49574960 ArrayRef<SILResultInfo> getResultsWithError () const {
49584961 return const_cast <SILFunctionType *>(this )->getMutableResultsWithError ();
@@ -4989,17 +4992,17 @@ class SILFunctionType final
49894992 // indirect property, not the SIL indirect property, should be consulted to
49904993 // determine whether function reabstraction is necessary.
49914994 unsigned getNumIndirectFormalResults () const {
4992- return isCoroutine () ? 0 : NumAnyIndirectFormalResults;
4995+ return NumAnyIndirectFormalResults;
49934996 }
49944997 // / Does this function have any formally indirect results?
49954998 bool hasIndirectFormalResults () const {
49964999 return getNumIndirectFormalResults () != 0 ;
49975000 }
49985001 unsigned getNumDirectFormalResults () const {
4999- return isCoroutine () ? 0 : NumAnyResults - NumAnyIndirectFormalResults;
5002+ return NumAnyResults - NumAnyIndirectFormalResults;
50005003 }
50015004 unsigned getNumPackResults () const {
5002- return isCoroutine () ? 0 : NumPackResults;
5005+ return NumPackResults;
50035006 }
50045007 bool hasIndirectErrorResult () const {
50055008 return hasErrorResult () && getErrorResult ().isFormalIndirect ();
@@ -5057,17 +5060,17 @@ class SILFunctionType final
50575060 TypeExpansionContext expansion);
50585061
50595062 unsigned getNumIndirectFormalYields () const {
5060- return isCoroutine () ? NumAnyIndirectFormalResults : 0 ;
5063+ return NumAnyIndirectFormalYieldResults ;
50615064 }
50625065 // / Does this function have any formally indirect yields?
50635066 bool hasIndirectFormalYields () const {
50645067 return getNumIndirectFormalYields () != 0 ;
50655068 }
50665069 unsigned getNumDirectFormalYields () const {
5067- return isCoroutine () ? NumAnyResults - NumAnyIndirectFormalResults : 0 ;
5070+ return NumAnyYieldResults - NumAnyIndirectFormalYieldResults ;
50685071 }
50695072 unsigned getNumPackYields () const {
5070- return isCoroutine () ? NumPackResults : 0 ;
5073+ return NumPackYieldResults ;
50715074 }
50725075
50735076 struct IndirectFormalYieldFilter {
0 commit comments