
`-fvisibility-from-dllstorageclass` allows for overriding the visibility of globals from their DLL storage class. The visibility to apply can be customised for the different classes of globals via a set of dependent options that specify the mapping values: - `-fvisibility-dllexport=<value>` - `-fvisibility-nodllstorageclass=<value>` - `-fvisibility-externs-dllimport=<value>` - `-fvisibility-externs-nodllstorageclass=<value>` Currently, one of the existing LLVM visibilities, `hidden`, `protected`, `default`, can be used as a mapping value. This change adds a new mapping value: `keep`, which specifies that the visibility should not be overridden for that class of globals. The behaviour of `-fvisibility-from-dllstorageclass` is otherwise unchanged and existing uses of this set of options will be unaffected. The background to this change is that currently the PS4 and PS5 compilers effectively ignore visibility - dllimport/export is the supported method for export control in C/C++ source code. Now, we would like to support visibility attributes and options in our frontend, in addition to dllimport/export. To support this, we will override the visibility of globals with explicit dllimport/export annotations but use the `keep` setting for globals which do not have an explicit dllimport/export. There are also some minor improvements to the existing options: - Make the `LANGOPS` `BENIGN` as they don't involve the AST. - Correct/clarify the help text for the options.
120 lines
5.9 KiB
C
120 lines
5.9 KiB
C
//// Check behaviour of -fvisibility-from-dllstorageclass options
|
|
|
|
// RUN: %clang -target x86_64-unknown-windows-itanium -fdeclspec \
|
|
// RUN: -Werror -S -### %s 2>&1 | \
|
|
// RUN: FileCheck %s \
|
|
// RUN: --implicit-check-not=-fvisibility-from-dllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-dllexport \
|
|
// RUN: --implicit-check-not=-fvisibility-nodllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-dllimport \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-nodllstorageclass
|
|
|
|
// RUN: %clang -target x86_64-unknown-windows-itanium -fdeclspec \
|
|
// RUN: -fvisibility-from-dllstorageclass \
|
|
// RUN: -fno-visibility-from-dllstorageclass \
|
|
// RUN: -Werror -S -### %s 2>&1 | \
|
|
// RUN: FileCheck %s \
|
|
// RUN: --implicit-check-not=-fvisibility-from-dllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-dllexport \
|
|
// RUN: --implicit-check-not=-fvisibility-nodllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-dllimport \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-nodllstorageclass
|
|
|
|
// RUN: %clang -target x86_64-unknown-windows-itanium -fdeclspec \
|
|
// RUN: -fno-visibility-from-dllstorageclass \
|
|
// RUN: -fvisibility-from-dllstorageclass \
|
|
// RUN: -Werror -S -### %s 2>&1 | \
|
|
// RUN: FileCheck %s --check-prefix=SET \
|
|
// RUN: --implicit-check-not=-fvisibility-from-dllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-dllexport \
|
|
// RUN: --implicit-check-not=-fvisibility-nodllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-dllimport \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-nodllstorageclass
|
|
|
|
// RUN: %clang -target x86_64-unknown-windows-itanium -fdeclspec \
|
|
// RUN: -fvisibility-dllexport=hidden \
|
|
// RUN: -fvisibility-nodllstorageclass=protected \
|
|
// RUN: -fvisibility-externs-dllimport=hidden \
|
|
// RUN: -fvisibility-externs-nodllstorageclass=protected \
|
|
// RUN: -S -### %s 2>&1 | \
|
|
// RUN: FileCheck %s --check-prefixes=UNUSED \
|
|
// RUN: --implicit-check-not=-fvisibility-from-dllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-dllexport \
|
|
// RUN: --implicit-check-not=-fvisibility-nodllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-dllimport \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-nodllstorageclass \
|
|
// RUN: --implicit-check-not=error: \
|
|
// RUN: --implicit-check-not=warning:
|
|
|
|
// RUN: %clang -target x86_64-unknown-windows-itanium -fdeclspec \
|
|
// RUN: -fno-visibility-from-dllstorageclass \
|
|
// RUN: -fvisibility-dllexport=hidden \
|
|
// RUN: -fvisibility-nodllstorageclass=protected \
|
|
// RUN: -fvisibility-externs-dllimport=hidden \
|
|
// RUN: -fvisibility-externs-nodllstorageclass=protected \
|
|
// RUN: -S -### %s 2>&1 | \
|
|
// RUN: FileCheck %s --check-prefixes=UNUSED \
|
|
// RUN: --implicit-check-not=-fvisibility-from-dllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-dllexport \
|
|
// RUN: --implicit-check-not=-fvisibility-nodllstorageclass \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-dllimport \
|
|
// RUN: --implicit-check-not=-fvisibility-externs-nodllstorageclass \
|
|
// RUN: --implicit-check-not=error: \
|
|
// RUN: --implicit-check-not=warning:
|
|
|
|
// UNUSED: warning: argument unused during compilation: '-fvisibility-dllexport=hidden'
|
|
// UNUSED-NEXT: warning: argument unused during compilation: '-fvisibility-nodllstorageclass=protected'
|
|
// UNUSED-NEXT: warning: argument unused during compilation: '-fvisibility-externs-dllimport=hidden'
|
|
// UNUSED-NEXT: warning: argument unused during compilation: '-fvisibility-externs-nodllstorageclass=protected'
|
|
|
|
// RUN: %clang -target x86_64-unknown-windows-itanium -fdeclspec \
|
|
// RUN: -fvisibility-from-dllstorageclass \
|
|
// RUN: -fvisibility-dllexport=default \
|
|
// RUN: -fvisibility-dllexport=hidden \
|
|
// RUN: -fvisibility-nodllstorageclass=default \
|
|
// RUN: -fvisibility-nodllstorageclass=protected \
|
|
// RUN: -fvisibility-externs-dllimport=default \
|
|
// RUN: -fvisibility-externs-dllimport=hidden \
|
|
// RUN: -fvisibility-externs-nodllstorageclass=default \
|
|
// RUN: -fvisibility-externs-nodllstorageclass=protected \
|
|
// RUN: -Werror -S -### %s 2>&1 | \
|
|
// RUN: FileCheck %s --check-prefixes=SET,ALL
|
|
|
|
// SET: "-fvisibility-from-dllstorageclass"
|
|
// ALL-SAME: "-fvisibility-dllexport=hidden"
|
|
// ALL-SAME: "-fvisibility-nodllstorageclass=protected"
|
|
// ALL-SAME: "-fvisibility-externs-dllimport=hidden"
|
|
// ALL-SAME: "-fvisibility-externs-nodllstorageclass=protected"
|
|
|
|
//// Test that "keep" can be specified, which means that the visibility of
|
|
//// the matching globals will not be adjusted.
|
|
|
|
// RUN: %clang -target x86_64-unknown-windows-itanium -fdeclspec \
|
|
// RUN: -fvisibility-from-dllstorageclass \
|
|
// RUN: -fvisibility-dllexport=keep \
|
|
// RUN: -fvisibility-nodllstorageclass=keep \
|
|
// RUN: -fvisibility-externs-dllimport=keep \
|
|
// RUN: -fvisibility-externs-nodllstorageclass=keep \
|
|
// RUN: -Werror -S -### %s 2>&1 | \
|
|
// RUN: FileCheck %s --check-prefixes=KEEP
|
|
|
|
// KEEP: "-fvisibility-from-dllstorageclass"
|
|
// KEEP-SAME: "-fvisibility-dllexport=keep"
|
|
// KEEP-SAME: "-fvisibility-nodllstorageclass=keep"
|
|
// KEEP-SAME: "-fvisibility-externs-dllimport=keep"
|
|
// KEEP-SAME: "-fvisibility-externs-nodllstorageclass=keep"
|
|
|
|
// RUN: %clang -target x86_64-unknown-windows-itanium -fdeclspec \
|
|
// RUN: -fvisibility-from-dllstorageclass \
|
|
// RUN: -fvisibility-dllexport=default \
|
|
// RUN: -fvisibility-dllexport=keep \
|
|
// RUN: -fvisibility-nodllstorageclass=default \
|
|
// RUN: -fvisibility-nodllstorageclass=keep \
|
|
// RUN: -fvisibility-externs-dllimport=default \
|
|
// RUN: -fvisibility-externs-dllimport=keep \
|
|
// RUN: -fvisibility-externs-nodllstorageclass=default \
|
|
// RUN: -fvisibility-externs-nodllstorageclass=keep \
|
|
// RUN: -Werror -S -### %s 2>&1 | \
|
|
// RUN: FileCheck %s --check-prefixes=KEEP
|
|
|