@@ -3138,39 +3138,33 @@ class ILMngdMarshaler : public ILMarshaler
31383138 void EmitClearNative (ILCodeStream* pslILEmit) override
31393139 {
31403140 WRAPPER_NO_CONTRACT;
3141- ILCodeLabel* pNoManagedValueLabel = nullptr ;
31423141 if (IsFieldMarshal (m_dwMarshalFlags))
31433142 {
3144- pNoManagedValueLabel = pslILEmit->NewCodeLabel ();
3143+ ILCodeLabel* pHasManagedValueLabel = pslILEmit->NewCodeLabel ();
31453144 pslILEmit->EmitLDARG (StructMarshalStubs::MANAGED_STRUCT_ARGIDX);
3146- pslILEmit->EmitBRFALSE (pNoManagedValueLabel);
3145+ pslILEmit->EmitBRTRUE (pHasManagedValueLabel);
3146+ pslILEmit->EmitLDARG (StructMarshalStubs::MANAGED_STRUCT_ARGIDX);
3147+ EmitStoreManagedHomeAddr (pslILEmit);
3148+ pslILEmit->EmitLabel (pHasManagedValueLabel);
31473149 }
31483150
31493151 EmitCallMngdMarshalerMethod (pslILEmit, GetClearNativeMethod ());
3150-
3151- if (IsFieldMarshal (m_dwMarshalFlags))
3152- {
3153- pslILEmit->EmitLabel (pNoManagedValueLabel);
3154- }
31553152 }
31563153
31573154 void EmitClearNativeContents (ILCodeStream* pslILEmit) override
31583155 {
31593156 WRAPPER_NO_CONTRACT;
3160- ILCodeLabel* pNoManagedValueLabel = nullptr ;
31613157 if (IsFieldMarshal (m_dwMarshalFlags))
31623158 {
3163- pNoManagedValueLabel = pslILEmit->NewCodeLabel ();
3159+ ILCodeLabel* pHasManagedValueLabel = pslILEmit->NewCodeLabel ();
31643160 pslILEmit->EmitLDARG (StructMarshalStubs::MANAGED_STRUCT_ARGIDX);
3165- pslILEmit->EmitBRFALSE (pNoManagedValueLabel);
3161+ pslILEmit->EmitBRTRUE (pHasManagedValueLabel);
3162+ pslILEmit->EmitLDARG (StructMarshalStubs::MANAGED_STRUCT_ARGIDX);
3163+ EmitStoreManagedHomeAddr (pslILEmit);
3164+ pslILEmit->EmitLabel (pHasManagedValueLabel);
31663165 }
31673166
31683167 EmitCallMngdMarshalerMethod (pslILEmit, GetClearNativeContentsMethod ());
3169-
3170- if (IsFieldMarshal (m_dwMarshalFlags))
3171- {
3172- pslILEmit->EmitLabel (pNoManagedValueLabel);
3173- }
31743168 }
31753169
31763170 bool NeedsClearCLR () override
0 commit comments