Skip to content

deps, v8: strip out overly broad DLL Export annotations

This change fixes the ARM64 Windows build by removing the more broad of two conflicting DLL Export annotations in two places.

The conflict is because both LLVM and MSVC forbid having both a class and a class member marked for export.

Preferring the more narrowly targeted annotation avoids needing the LLVM-specific linker flag /Fc:dllexportInlines- to avoid exporting inline members of classes. When such a function is inlined and references inline members of other classes, the member of the other class is referenced and not inlined, causing missing symbol errors later (since the function is otherwise always inlined, references to it do not resolve).

A similar problem has been fixed before in V8: https://chromium-review.googlesource.com/c/v8/v8/+/1478216

EDIT: mscdex asked below about why this isn't coming from upstream V8, and this really should be explained here.

First, I plan to try that. V8's criteria for taking fixes in the stable branch are pretty tough, so it may not make it and if so it will then make sense to float the patch here. There is already a (broken) fix in v7.6 and v7.7 that has not been backported to v7.5.

Second, I want the fix to be available to @joaocgreis who is doing consistent ARM64 Windows CI/CD builds. It is so small I thought it would be worth putting here for his reference even if it does not end up being merged.

EDIT: V8 discussion: https://crbug.com/v8/9465

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • commit message follows commit guidelines

Merge request reports

Loading