react-native-codegen: Cxx TMs > Fixed Undefined Behavior exception when running ASAN builds (#41401)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41401

Changelog: [Internal]

When build Cxx Turbo Modules with Clang's ASAN build mode the apps are crashing at runtime due to, e.g.:
```
runtime error: downcast of address 0x00010dafd618 which does not point to an object of type 'facebook::react::NativePerformance'
0x00010dafd618: note: object is of type 'facebook::react::NativePerformanceCxxSpec<facebook::react::NativePerformance>'
 00 00 00 00  f0 08 49 06 01 00 00 00  4e 61 74 69 76 65 50 65  72 66 6f 72 6d 61 6e 63  65 43 78 78
              ^~~~~~~~~~~~~~~~~~~~~~~
              vptr for 'facebook::react::NativePerformanceCxxSpec<facebook::react::NativePerformance>'
UndefinedBehaviorSanitizer: undefined-behavior FBReactNativeSpecJSI.h:6122:17
```

Where the corresponding generated code looks like

```
NativePerformanceCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
    : TurboModule(std::string{NativePerformanceCxxSpec::kModuleName}, jsInvoker),
      delegate_(static_cast<T*>(this), jsInvoker) {}
```

This change fixes that problem

AddressSanitizer: stack-use-after-scope shared_ptr.h:634 in std::__1::shared_ptr<facebook::react::InstanceHandle const>::shared_ptr[abi:v160006](std::__1::shared_ptr<facebook::react::InstanceHandle const> const&)
Shadow bytes around the buggy address:
  0x00016cea4a80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x00016cea4b00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x00016cea4b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x00016cea4c00: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 f8 f8 f8 f8
  0x00016cea4c80: f8 f8 f2 f2 f2 f2 f8 f8 f2 f2 00 00 f2 f2 f8 f8
=>0x00016cea4d00: f2 f2 f8 f8 f2 f2 00 00 f2 f2[f8]f8 f2 f2 00 00
  0x00016cea4d80: f2 f2 f8 f8 f2 f2 f8 f8 f2 f2 f8 f8 f8 f2 f2 f2
  0x00016cea4e00: f2 f2 f8 f8 f2 f2 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8
  0x00016cea4e80: f8 f8 f8 f8 f8 f8 f8 f8 f8 f2 f2 f2 f2 f2 f2 f2
  0x00016cea4f00: f2 f2 f8 f8 f3 f3 f3 f3 00 00 00 00 00 00 00 00
  0x00016cea4f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==41992==ABORTING

```

Reviewed By: rshest

Differential Revision: D51183328

fbshipit-source-id: 5aff5b5eecb9d78f9b7438fbdda2c01625c9a4d9
This commit is contained in:
Christoph Purrer
2023-11-09 22:14:57 -08:00
committed by Facebook GitHub Bot
parent d7af27dd7d
commit c2ac0cc72a
3 changed files with 43 additions and 43 deletions
@@ -42,7 +42,7 @@ public:
protected:
NativeArrayTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeArrayTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeArrayTurboModuleCxxSpecJSI {
@@ -105,7 +105,7 @@ public:
protected:
NativeBooleanTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeBooleanTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeBooleanTurboModuleCxxSpecJSI {
@@ -160,7 +160,7 @@ public:
protected:
NativeCallbackTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeCallbackTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeCallbackTurboModuleCxxSpecJSI {
@@ -451,7 +451,7 @@ public:
protected:
NativeEnumTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeEnumTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeEnumTurboModuleCxxSpecJSI {
@@ -542,7 +542,7 @@ public:
protected:
NativeNullableTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeNullableTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeNullableTurboModuleCxxSpecJSI {
@@ -629,7 +629,7 @@ public:
protected:
NativeNumberTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeNumberTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeNumberTurboModuleCxxSpecJSI {
@@ -687,7 +687,7 @@ public:
protected:
NativeObjectTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeObjectTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeObjectTurboModuleCxxSpecJSI {
@@ -765,7 +765,7 @@ public:
protected:
NativeOptionalObjectTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeOptionalObjectTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeOptionalObjectTurboModuleCxxSpecJSI {
@@ -861,7 +861,7 @@ public:
protected:
NativePartialAnnotationTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativePartialAnnotationTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativePartialAnnotationTurboModuleCxxSpecJSI {
@@ -932,7 +932,7 @@ public:
protected:
NativePromiseTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativePromiseTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativePromiseTurboModuleCxxSpecJSI {
@@ -1036,7 +1036,7 @@ public:
protected:
NativeSampleTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleCxxSpecJSI {
@@ -1228,7 +1228,7 @@ public:
protected:
NativeSampleTurboModuleArraysCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleArraysCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleArraysCxxSpecJSI {
@@ -1420,7 +1420,7 @@ public:
protected:
NativeSampleTurboModuleNullableCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleNullableCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleNullableCxxSpecJSI {
@@ -1614,7 +1614,7 @@ public:
protected:
NativeSampleTurboModuleNullableAndOptionalCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleNullableAndOptionalCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleNullableAndOptionalCxxSpecJSI {
@@ -1808,7 +1808,7 @@ public:
protected:
NativeSampleTurboModuleOptionalCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleOptionalCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleOptionalCxxSpecJSI {
@@ -1951,7 +1951,7 @@ public:
protected:
NativeStringTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeStringTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeStringTurboModuleCxxSpecJSI {
@@ -2030,7 +2030,7 @@ public:
protected:
NativeArrayTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeArrayTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeArrayTurboModuleCxxSpecJSI {
@@ -2093,7 +2093,7 @@ public:
protected:
NativeBooleanTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeBooleanTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeBooleanTurboModuleCxxSpecJSI {
@@ -2148,7 +2148,7 @@ public:
protected:
NativeCallbackTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeCallbackTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeCallbackTurboModuleCxxSpecJSI {
@@ -2439,7 +2439,7 @@ public:
protected:
NativeEnumTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeEnumTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeEnumTurboModuleCxxSpecJSI {
@@ -2530,7 +2530,7 @@ public:
protected:
NativeNullableTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeNullableTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeNullableTurboModuleCxxSpecJSI {
@@ -2617,7 +2617,7 @@ public:
protected:
NativeNumberTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeNumberTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeNumberTurboModuleCxxSpecJSI {
@@ -2675,7 +2675,7 @@ public:
protected:
NativeObjectTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeObjectTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeObjectTurboModuleCxxSpecJSI {
@@ -2753,7 +2753,7 @@ public:
protected:
NativeOptionalObjectTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeOptionalObjectTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeOptionalObjectTurboModuleCxxSpecJSI {
@@ -2849,7 +2849,7 @@ public:
protected:
NativePartialAnnotationTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativePartialAnnotationTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativePartialAnnotationTurboModuleCxxSpecJSI {
@@ -2920,7 +2920,7 @@ public:
protected:
NativePromiseTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativePromiseTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativePromiseTurboModuleCxxSpecJSI {
@@ -3024,7 +3024,7 @@ public:
protected:
NativeSampleTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleCxxSpecJSI {
@@ -3216,7 +3216,7 @@ public:
protected:
NativeSampleTurboModuleArraysCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleArraysCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleArraysCxxSpecJSI {
@@ -3408,7 +3408,7 @@ public:
protected:
NativeSampleTurboModuleNullableCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleNullableCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleNullableCxxSpecJSI {
@@ -3602,7 +3602,7 @@ public:
protected:
NativeSampleTurboModuleNullableAndOptionalCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleNullableAndOptionalCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleNullableAndOptionalCxxSpecJSI {
@@ -3796,7 +3796,7 @@ public:
protected:
NativeSampleTurboModuleOptionalCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleOptionalCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleOptionalCxxSpecJSI {
@@ -3939,7 +3939,7 @@ public:
protected:
NativeStringTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeStringTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeStringTurboModuleCxxSpecJSI {
@@ -80,7 +80,7 @@ public:
protected:
${hasteModuleName}CxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{${hasteModuleName}CxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public ${hasteModuleName}CxxSpecJSI {
@@ -41,7 +41,7 @@ public:
protected:
NativeSampleTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleCxxSpecJSI {
@@ -111,7 +111,7 @@ public:
protected:
NativeSampleTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleCxxSpecJSI {
@@ -359,7 +359,7 @@ public:
protected:
NativeSampleTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleCxxSpecJSI {
@@ -462,7 +462,7 @@ public:
protected:
NativeSampleTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleCxxSpecJSI {
@@ -599,7 +599,7 @@ public:
protected:
AliasTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{AliasTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public AliasTurboModuleCxxSpecJSI {
@@ -934,7 +934,7 @@ public:
protected:
NativeCameraRollManagerCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeCameraRollManagerCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeCameraRollManagerCxxSpecJSI {
@@ -1170,7 +1170,7 @@ public:
protected:
NativeExceptionsManagerCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeExceptionsManagerCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeExceptionsManagerCxxSpecJSI {
@@ -1373,7 +1373,7 @@ public:
protected:
NativeSampleTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleCxxSpecJSI {
@@ -1548,7 +1548,7 @@ public:
protected:
NativeSampleTurboModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModuleCxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModuleCxxSpecJSI {
@@ -1595,7 +1595,7 @@ public:
protected:
NativeSampleTurboModule2CxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
: TurboModule(std::string{NativeSampleTurboModule2CxxSpec::kModuleName}, jsInvoker),
delegate_(static_cast<T*>(this), jsInvoker) {}
delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
private:
class Delegate : public NativeSampleTurboModule2CxxSpecJSI {