reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
# 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-NEXT:     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-NEXT:     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-NEXT:     Name:            target_features
# USED-NEXT:     Features:
# USED-NEXT:       - Prefix:          USED
# USED-NEXT:         Name:            foo
# USED-NEXT: ...

# REQUIRED:        - Type:            CUSTOM
# REQUIRED-NEXT:     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-NEXT:     Name:            target_features
# DISALLOWED-NOCHECK-NEXT:     Features:
# DISALLOWED-NOCHECK-NEXT:       - Prefix:          USED
# DISALLOWED-NOCHECK-NEXT:         Name:            foo
# DISALLOWED-NOCHECK-NEXT: ...

# NONE:        - Type:            CUSTOM
# NONE-NEXT:     Name:            target_features
# NONE-NEXT:     Features:
# NONE-NEXT:       - Prefix:          USED
# NONE-NEXT:         Name:            foo
# NONE-NEXT: ...