| # RUN: yaml2obj %s -o %t1.o |
| |
| # RUN: wasm-ld --no-entry --features=foo,bar,baz -o - %t1.o | obj2yaml | FileCheck %s --check-prefix SPECIFIED |
| |
| # RUN: not wasm-ld --no-entry --features=bar,baz,quux -o /dev/null %t1.o 2>&1 | FileCheck %s --check-prefix UNSPECIFIED |
| |
| # RUN: wasm-ld --no-entry --no-check-features --features=bar,baz,quux -o - %t1.o | obj2yaml | FileCheck %s --check-prefix UNSPECIFIED-NOCHECK |
| |
| # RUN: yaml2obj %S/Inputs/use-feature-foo.yaml -o %t.used.o |
| # RUN: wasm-ld --no-entry -o - %t1.o %t.used.o | obj2yaml | FileCheck %s --check-prefix USED |
| |
| # RUN: yaml2obj %S/Inputs/require-feature-foo.yaml -o %t.required.o |
| # RUN: wasm-ld --no-entry -o - %t1.o %t.required.o | obj2yaml | FileCheck %s --check-prefix REQUIRED |
| |
| # RUN: yaml2obj %S/Inputs/disallow-feature-foo.yaml -o %t.disallowed.o |
| # RUN: not wasm-ld --no-entry -o /dev/null %t1.o %t.disallowed.o 2>&1 | FileCheck %s --check-prefix DISALLOWED |
| |
| # RUN: wasm-ld --no-entry --no-check-features -o - %t1.o %t.disallowed.o | obj2yaml | FileCheck %s --check-prefix DISALLOWED-NOCHECK |
| |
| # RUN: yaml2obj %S/Inputs/no-feature-foo.yaml -o %t.none.o |
| # RUN: wasm-ld --no-entry -o - %t1.o %t.none.o | obj2yaml | FileCheck %s --check-prefix NONE |
| |
| # Check that the following combinations of feature linkage policies |
| # give the expected results: |
| # |
| # USED x USED => USED |
| # USED x REQUIRED => USED |
| # USED x DISALLOWED => Error |
| # USED x NONE => USED |
| |
| --- !WASM |
| FileHeader: |
| Version: 0x00000001 |
| Sections: |
| - Type: CUSTOM |
| Name: linking |
| Version: 2 |
| - Type: CUSTOM |
| Name: target_features |
| Features: |
| - Prefix: USED |
| Name: "foo" |
| ... |
| |
| # SPECIFIED: - Type: CUSTOM |
| # SPECIFIED: Name: target_features |
| # SPECIFIED-NEXT: Features: |
| # SPECIFIED-NEXT: - Prefix: USED |
| # SPECIFIED-NEXT: Name: bar |
| # SPECIFIED-NEXT: - Prefix: USED |
| # SPECIFIED-NEXT: Name: baz |
| # SPECIFIED-NEXT: - Prefix: USED |
| # SPECIFIED-NEXT: Name: foo |
| # SPECIFIED-NEXT: ... |
| |
| # UNSPECIFIED: Target feature 'foo' used by {{.*}}target-feature-used.yaml.tmp1.o is not allowed.{{$}} |
| |
| # UNSPECIFIED-NOCHECK: - Type: CUSTOM |
| # UNSPECIFIED-NOCHECK: Name: target_features |
| # UNSPECIFIED-NOCHECK-NEXT: Features: |
| # UNSPECIFIED-NOCHECK-NEXT: - Prefix: USED |
| # UNSPECIFIED-NOCHECK-NEXT: Name: bar |
| # UNSPECIFIED-NOCHECK-NEXT: - Prefix: USED |
| # UNSPECIFIED-NOCHECK-NEXT: Name: baz |
| # UNSPECIFIED-NOCHECK-NEXT: - Prefix: USED |
| # UNSPECIFIED-NOCHECK-NEXT: Name: quux |
| # UNSPECIFIED-NOCHECK-NEXT: ... |
| |
| # USED: - Type: CUSTOM |
| # USED: Name: target_features |
| # USED-NEXT: Features: |
| # USED-NEXT: - Prefix: USED |
| # USED-NEXT: Name: foo |
| # USED-NEXT: ... |
| |
| # REQUIRED: - Type: CUSTOM |
| # REQUIRED: Name: target_features |
| # REQUIRED-NEXT: Features: |
| # REQUIRED-NEXT: - Prefix: USED |
| # REQUIRED-NEXT: Name: foo |
| # REQUIRED-NEXT: ... |
| |
| # DISALLOWED: Target feature 'foo' used in {{.*}}target-feature-used.yaml.tmp1.o is disallowed by {{.*}}target-feature-used.yaml.tmp.disallowed.o. Use --no-check-features to suppress.{{$}} |
| |
| # DISALLOWED-NOCHECK: - Type: CUSTOM |
| # DISALLOWED-NOCHECK: Name: target_features |
| # DISALLOWED-NOCHECK-NEXT: Features: |
| # DISALLOWED-NOCHECK-NEXT: - Prefix: USED |
| # DISALLOWED-NOCHECK-NEXT: Name: foo |
| # DISALLOWED-NOCHECK-NEXT: ... |
| |
| # NONE: - Type: CUSTOM |
| # NONE: Name: target_features |
| # NONE-NEXT: Features: |
| # NONE-NEXT: - Prefix: USED |
| # NONE-NEXT: Name: foo |
| # NONE-NEXT: ... |