[lld][WebAssembly] Allow `atomics` feature with unshared memory

https://github.com/WebAssembly/threads/issues/144 updated the
WebAssembly threads proposal to make atomic operations on unshared memories
valid. This change updates the feature checking in the linker accordingly.
Production WebAssembly engines have recently been updated to allow this
behvaior, but after this change users who accidentally use atomics with unshared
memories on older versions of the engines will get validation errors at runtime
rather than link errors.

Differential Revision: https://reviews.llvm.org/D79530
This commit is contained in:
Thomas Lively 2020-09-24 20:35:29 -07:00
parent 64b8a633a8
commit 15a5e86fb3
2 changed files with 0 additions and 13 deletions

View File

@ -8,8 +8,6 @@
# RUN: not wasm-ld --no-entry --shared-memory --max-memory=131072 --features=atomics %t1.o -o - 2>&1 | FileCheck %s --check-prefix SHARED-NO-BULK-MEM
# RUN: not wasm-ld --no-entry --features=atomics %t1.o -o - 2>&1 | FileCheck %s --check-prefix ATOMICS-NO-SHARED
# RUN: wasm-ld --relocatable --features=atomics %t1.o -o - | obj2yaml | FileCheck %s --check-prefix ATOMICS-RELOCATABLE
# RUN: wasm-ld --no-entry --shared-memory --max-memory=131072 --features=atomics,bulk-memory %t1.o -o - | obj2yaml | FileCheck %s --check-prefix SHARED
@ -65,8 +63,6 @@ Sections:
# SHARED-NO-BULK-MEM: 'bulk-memory' feature must be used in order to use shared memory
# ATOMICS-NO-SHARED: 'atomics' feature is used, so --shared-memory must be used{{$}}
# ATOMICS-RELOCATABLE: - Type: MEMORY
# ATOMICS-RELOCATABLE-NEXT: Memories:
# ATOMICS-RELOCATABLE-NEXT: Initial: 0x00000001

View File

@ -450,15 +450,6 @@ void Writer::populateTargetFeatures() {
for (const auto &key : used.keys())
allowed.insert(std::string(key));
if (!config->relocatable && allowed.count("atomics") &&
!config->sharedMemory) {
if (inferFeatures)
error(Twine("'atomics' feature is used by ") + used["atomics"] +
", so --shared-memory must be used");
else
error("'atomics' feature is used, so --shared-memory must be used");
}
if (!config->checkFeatures)
return;