Skip to content

Commit 798a7c5

Browse files
committed
Fix build issue building component codegen using clang (microsoft#14393)
* Fix build issue building component codegen using clang * Change files
1 parent e62a4a8 commit 798a7c5

17 files changed

+107
-84
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "Fix build issue building component codegen using clang",
4+
"packageName": "@react-native-windows/codegen",
5+
"email": "30809111+acoates-ms@users.noreply.github.com",
6+
"dependentChangeType": "patch"
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "Fix build issue building component codegen using clang",
4+
"packageName": "react-native-windows",
5+
"email": "30809111+acoates-ms@users.noreply.github.com",
6+
"dependentChangeType": "patch"
7+
}

packages/@react-native-windows/codegen/src/generators/GenerateComponentWindows.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,15 +184,15 @@ void Register::_COMPONENT_NAME_::NativeComponent(
184184
userData->UpdateEventEmitter(std::make_shared<::_COMPONENT_NAME_::EventEmitter>(eventEmitter));
185185
});
186186
187-
if constexpr (&TUserData::FinalizeUpdate != &Base::_COMPONENT_NAME_::<TUserData>::FinalizeUpdate) {
187+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::FinalizeUpdate != &Base::_COMPONENT_NAME_::<TUserData>::FinalizeUpdate) {
188188
builder.SetFinalizeUpdateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
189189
winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept {
190190
auto userData = view.UserData().as<TUserData>();
191191
userData->FinalizeUpdate(view, mask);
192192
});
193193
}
194194
195-
if constexpr (&TUserData::UpdateState != &Base::_COMPONENT_NAME_::<TUserData>::UpdateState) {
195+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UpdateState != &Base::_COMPONENT_NAME_::<TUserData>::UpdateState) {
196196
builder.SetUpdateStateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
197197
const winrt::Microsoft::ReactNative::IComponentState &newState) noexcept {
198198
auto userData = view.UserData().as<TUserData>();
@@ -202,15 +202,15 @@ void Register::_COMPONENT_NAME_::NativeComponent(
202202
203203
::_REGISTER_CUSTOM_COMMAND_HANDLER_::
204204
205-
if constexpr (&TUserData::MountChildComponentView != &Base::_COMPONENT_NAME_::<TUserData>::MountChildComponentView) {
205+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::MountChildComponentView != &Base::_COMPONENT_NAME_::<TUserData>::MountChildComponentView) {
206206
builder.SetMountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
207207
const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept {
208208
auto userData = view.UserData().as<TUserData>();
209209
return userData->MountChildComponentView(view, args);
210210
});
211211
}
212212
213-
if constexpr (&TUserData::UnmountChildComponentView != &Base::_COMPONENT_NAME_::<TUserData>::UnmountChildComponentView) {
213+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UnmountChildComponentView != &Base::_COMPONENT_NAME_::<TUserData>::UnmountChildComponentView) {
214214
builder.SetUnmountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
215215
const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept {
216216
auto userData = view.UserData().as<TUserData>();
@@ -220,13 +220,13 @@ void Register::_COMPONENT_NAME_::NativeComponent(
220220
221221
compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
222222
auto userData = winrt::make_self<TUserData>();
223-
if constexpr (&TUserData::Initialize != &Base::_COMPONENT_NAME_::<TUserData>::Initialize) {
223+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &Base::_COMPONENT_NAME_::<TUserData>::Initialize) {
224224
userData->Initialize(view);
225225
}
226226
view.UserData(*userData);
227227
});
228228
229-
if constexpr (&TUserData::CreateVisual != &Base::_COMPONENT_NAME_::<TUserData>::CreateVisual) {
229+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateVisual != &Base::_COMPONENT_NAME_::<TUserData>::CreateVisual) {
230230
compBuilder.SetCreateVisualHandler([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
231231
auto userData = view.UserData().as<TUserData>();
232232
return userData->CreateVisual(view);

vnext/Microsoft.ReactNative.Cxx/NativeModules.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,6 +1360,15 @@ inline ReactModuleProvider MakeTurboModuleProvider() noexcept {
13601360
return MakeModuleProvider<TModule>();
13611361
}
13621362

1363+
// Clang does not allow a virtual function address to be a constexpr statement
1364+
#if !defined(CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS)
1365+
#if defined(__clang__)
1366+
#define CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS
1367+
#else
1368+
#define CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS constexpr
1369+
#endif
1370+
#endif
1371+
13631372
} // namespace winrt::Microsoft::ReactNative
13641373

13651374
namespace React {

vnext/codegen/react/components/rnwcore/ActivityIndicatorView.g.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -147,31 +147,31 @@ void RegisterActivityIndicatorViewNativeComponent(
147147
userData->UpdateEventEmitter(std::make_shared<ActivityIndicatorViewEventEmitter>(eventEmitter));
148148
});
149149

150-
if constexpr (&TUserData::FinalizeUpdate != &BaseActivityIndicatorView<TUserData>::FinalizeUpdate) {
150+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::FinalizeUpdate != &BaseActivityIndicatorView<TUserData>::FinalizeUpdate) {
151151
builder.SetFinalizeUpdateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
152152
winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept {
153153
auto userData = view.UserData().as<TUserData>();
154154
userData->FinalizeUpdate(view, mask);
155155
});
156156
}
157157

158-
if constexpr (&TUserData::UpdateState != &BaseActivityIndicatorView<TUserData>::UpdateState) {
158+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UpdateState != &BaseActivityIndicatorView<TUserData>::UpdateState) {
159159
builder.SetUpdateStateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
160160
const winrt::Microsoft::ReactNative::IComponentState &newState) noexcept {
161161
auto userData = view.UserData().as<TUserData>();
162162
userData->UpdateState(view, newState);
163163
});
164164
}
165165

166-
if constexpr (&TUserData::MountChildComponentView != &BaseActivityIndicatorView<TUserData>::MountChildComponentView) {
166+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::MountChildComponentView != &BaseActivityIndicatorView<TUserData>::MountChildComponentView) {
167167
builder.SetMountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
168168
const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept {
169169
auto userData = view.UserData().as<TUserData>();
170170
return userData->MountChildComponentView(view, args);
171171
});
172172
}
173173

174-
if constexpr (&TUserData::UnmountChildComponentView != &BaseActivityIndicatorView<TUserData>::UnmountChildComponentView) {
174+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UnmountChildComponentView != &BaseActivityIndicatorView<TUserData>::UnmountChildComponentView) {
175175
builder.SetUnmountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
176176
const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept {
177177
auto userData = view.UserData().as<TUserData>();
@@ -181,13 +181,13 @@ void RegisterActivityIndicatorViewNativeComponent(
181181

182182
compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
183183
auto userData = winrt::make_self<TUserData>();
184-
if constexpr (&TUserData::Initialize != &BaseActivityIndicatorView<TUserData>::Initialize) {
184+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &BaseActivityIndicatorView<TUserData>::Initialize) {
185185
userData->Initialize(view);
186186
}
187187
view.UserData(*userData);
188188
});
189189

190-
if constexpr (&TUserData::CreateVisual != &BaseActivityIndicatorView<TUserData>::CreateVisual) {
190+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateVisual != &BaseActivityIndicatorView<TUserData>::CreateVisual) {
191191
compBuilder.SetCreateVisualHandler([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
192192
auto userData = view.UserData().as<TUserData>();
193193
return userData->CreateVisual(view);

vnext/codegen/react/components/rnwcore/AndroidDrawerLayout.g.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,15 +224,15 @@ void RegisterAndroidDrawerLayoutNativeComponent(
224224
userData->UpdateEventEmitter(std::make_shared<AndroidDrawerLayoutEventEmitter>(eventEmitter));
225225
});
226226

227-
if constexpr (&TUserData::FinalizeUpdate != &BaseAndroidDrawerLayout<TUserData>::FinalizeUpdate) {
227+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::FinalizeUpdate != &BaseAndroidDrawerLayout<TUserData>::FinalizeUpdate) {
228228
builder.SetFinalizeUpdateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
229229
winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept {
230230
auto userData = view.UserData().as<TUserData>();
231231
userData->FinalizeUpdate(view, mask);
232232
});
233233
}
234234

235-
if constexpr (&TUserData::UpdateState != &BaseAndroidDrawerLayout<TUserData>::UpdateState) {
235+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UpdateState != &BaseAndroidDrawerLayout<TUserData>::UpdateState) {
236236
builder.SetUpdateStateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
237237
const winrt::Microsoft::ReactNative::IComponentState &newState) noexcept {
238238
auto userData = view.UserData().as<TUserData>();
@@ -246,15 +246,15 @@ void RegisterAndroidDrawerLayoutNativeComponent(
246246
userData->HandleCommand(view, args);
247247
});
248248

249-
if constexpr (&TUserData::MountChildComponentView != &BaseAndroidDrawerLayout<TUserData>::MountChildComponentView) {
249+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::MountChildComponentView != &BaseAndroidDrawerLayout<TUserData>::MountChildComponentView) {
250250
builder.SetMountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
251251
const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept {
252252
auto userData = view.UserData().as<TUserData>();
253253
return userData->MountChildComponentView(view, args);
254254
});
255255
}
256256

257-
if constexpr (&TUserData::UnmountChildComponentView != &BaseAndroidDrawerLayout<TUserData>::UnmountChildComponentView) {
257+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UnmountChildComponentView != &BaseAndroidDrawerLayout<TUserData>::UnmountChildComponentView) {
258258
builder.SetUnmountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
259259
const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept {
260260
auto userData = view.UserData().as<TUserData>();
@@ -264,13 +264,13 @@ void RegisterAndroidDrawerLayoutNativeComponent(
264264

265265
compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
266266
auto userData = winrt::make_self<TUserData>();
267-
if constexpr (&TUserData::Initialize != &BaseAndroidDrawerLayout<TUserData>::Initialize) {
267+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &BaseAndroidDrawerLayout<TUserData>::Initialize) {
268268
userData->Initialize(view);
269269
}
270270
view.UserData(*userData);
271271
});
272272

273-
if constexpr (&TUserData::CreateVisual != &BaseAndroidDrawerLayout<TUserData>::CreateVisual) {
273+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateVisual != &BaseAndroidDrawerLayout<TUserData>::CreateVisual) {
274274
compBuilder.SetCreateVisualHandler([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
275275
auto userData = view.UserData().as<TUserData>();
276276
return userData->CreateVisual(view);

vnext/codegen/react/components/rnwcore/AndroidHorizontalScrollContentView.g.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,31 +135,31 @@ void RegisterAndroidHorizontalScrollContentViewNativeComponent(
135135
userData->UpdateEventEmitter(std::make_shared<AndroidHorizontalScrollContentViewEventEmitter>(eventEmitter));
136136
});
137137

138-
if constexpr (&TUserData::FinalizeUpdate != &BaseAndroidHorizontalScrollContentView<TUserData>::FinalizeUpdate) {
138+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::FinalizeUpdate != &BaseAndroidHorizontalScrollContentView<TUserData>::FinalizeUpdate) {
139139
builder.SetFinalizeUpdateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
140140
winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept {
141141
auto userData = view.UserData().as<TUserData>();
142142
userData->FinalizeUpdate(view, mask);
143143
});
144144
}
145145

146-
if constexpr (&TUserData::UpdateState != &BaseAndroidHorizontalScrollContentView<TUserData>::UpdateState) {
146+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UpdateState != &BaseAndroidHorizontalScrollContentView<TUserData>::UpdateState) {
147147
builder.SetUpdateStateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
148148
const winrt::Microsoft::ReactNative::IComponentState &newState) noexcept {
149149
auto userData = view.UserData().as<TUserData>();
150150
userData->UpdateState(view, newState);
151151
});
152152
}
153153

154-
if constexpr (&TUserData::MountChildComponentView != &BaseAndroidHorizontalScrollContentView<TUserData>::MountChildComponentView) {
154+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::MountChildComponentView != &BaseAndroidHorizontalScrollContentView<TUserData>::MountChildComponentView) {
155155
builder.SetMountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
156156
const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept {
157157
auto userData = view.UserData().as<TUserData>();
158158
return userData->MountChildComponentView(view, args);
159159
});
160160
}
161161

162-
if constexpr (&TUserData::UnmountChildComponentView != &BaseAndroidHorizontalScrollContentView<TUserData>::UnmountChildComponentView) {
162+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UnmountChildComponentView != &BaseAndroidHorizontalScrollContentView<TUserData>::UnmountChildComponentView) {
163163
builder.SetUnmountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
164164
const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept {
165165
auto userData = view.UserData().as<TUserData>();
@@ -169,13 +169,13 @@ void RegisterAndroidHorizontalScrollContentViewNativeComponent(
169169

170170
compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
171171
auto userData = winrt::make_self<TUserData>();
172-
if constexpr (&TUserData::Initialize != &BaseAndroidHorizontalScrollContentView<TUserData>::Initialize) {
172+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &BaseAndroidHorizontalScrollContentView<TUserData>::Initialize) {
173173
userData->Initialize(view);
174174
}
175175
view.UserData(*userData);
176176
});
177177

178-
if constexpr (&TUserData::CreateVisual != &BaseAndroidHorizontalScrollContentView<TUserData>::CreateVisual) {
178+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateVisual != &BaseAndroidHorizontalScrollContentView<TUserData>::CreateVisual) {
179179
compBuilder.SetCreateVisualHandler([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
180180
auto userData = view.UserData().as<TUserData>();
181181
return userData->CreateVisual(view);

vnext/codegen/react/components/rnwcore/AndroidProgressBar.g.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -159,31 +159,31 @@ void RegisterAndroidProgressBarNativeComponent(
159159
userData->UpdateEventEmitter(std::make_shared<AndroidProgressBarEventEmitter>(eventEmitter));
160160
});
161161

162-
if constexpr (&TUserData::FinalizeUpdate != &BaseAndroidProgressBar<TUserData>::FinalizeUpdate) {
162+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::FinalizeUpdate != &BaseAndroidProgressBar<TUserData>::FinalizeUpdate) {
163163
builder.SetFinalizeUpdateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
164164
winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept {
165165
auto userData = view.UserData().as<TUserData>();
166166
userData->FinalizeUpdate(view, mask);
167167
});
168168
}
169169

170-
if constexpr (&TUserData::UpdateState != &BaseAndroidProgressBar<TUserData>::UpdateState) {
170+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UpdateState != &BaseAndroidProgressBar<TUserData>::UpdateState) {
171171
builder.SetUpdateStateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
172172
const winrt::Microsoft::ReactNative::IComponentState &newState) noexcept {
173173
auto userData = view.UserData().as<TUserData>();
174174
userData->UpdateState(view, newState);
175175
});
176176
}
177177

178-
if constexpr (&TUserData::MountChildComponentView != &BaseAndroidProgressBar<TUserData>::MountChildComponentView) {
178+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::MountChildComponentView != &BaseAndroidProgressBar<TUserData>::MountChildComponentView) {
179179
builder.SetMountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
180180
const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept {
181181
auto userData = view.UserData().as<TUserData>();
182182
return userData->MountChildComponentView(view, args);
183183
});
184184
}
185185

186-
if constexpr (&TUserData::UnmountChildComponentView != &BaseAndroidProgressBar<TUserData>::UnmountChildComponentView) {
186+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UnmountChildComponentView != &BaseAndroidProgressBar<TUserData>::UnmountChildComponentView) {
187187
builder.SetUnmountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view,
188188
const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept {
189189
auto userData = view.UserData().as<TUserData>();
@@ -193,13 +193,13 @@ void RegisterAndroidProgressBarNativeComponent(
193193

194194
compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
195195
auto userData = winrt::make_self<TUserData>();
196-
if constexpr (&TUserData::Initialize != &BaseAndroidProgressBar<TUserData>::Initialize) {
196+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &BaseAndroidProgressBar<TUserData>::Initialize) {
197197
userData->Initialize(view);
198198
}
199199
view.UserData(*userData);
200200
});
201201

202-
if constexpr (&TUserData::CreateVisual != &BaseAndroidProgressBar<TUserData>::CreateVisual) {
202+
if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateVisual != &BaseAndroidProgressBar<TUserData>::CreateVisual) {
203203
compBuilder.SetCreateVisualHandler([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept {
204204
auto userData = view.UserData().as<TUserData>();
205205
return userData->CreateVisual(view);

0 commit comments

Comments
 (0)