forked from OSchip/llvm-project
[WebAssembly] Enable -fvisibility=hidden by default.
This, along with many things in the WebAssembly target, is experimental. Feedback is welcome. llvm-svn: 257006
This commit is contained in:
parent
a5b804be61
commit
e3d71e14d7
|
@ -2069,6 +2069,16 @@ void Clang::AddHexagonTargetArgs(const ArgList &Args,
|
|||
CmdArgs.push_back("-machine-sink-split=0");
|
||||
}
|
||||
|
||||
void Clang::AddWebAssemblyTargetArgs(const ArgList &Args,
|
||||
ArgStringList &CmdArgs) const {
|
||||
// Default to "hidden" visibility.
|
||||
if (!Args.hasArg(options::OPT_fvisibility_EQ,
|
||||
options::OPT_fvisibility_ms_compat)) {
|
||||
CmdArgs.push_back("-fvisibility");
|
||||
CmdArgs.push_back("hidden");
|
||||
}
|
||||
}
|
||||
|
||||
// Decode AArch64 features from string like +[no]featureA+[no]featureB+...
|
||||
static bool DecodeAArch64Features(const Driver &D, StringRef text,
|
||||
std::vector<const char *> &Features) {
|
||||
|
@ -4015,6 +4025,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
case llvm::Triple::hexagon:
|
||||
AddHexagonTargetArgs(Args, CmdArgs);
|
||||
break;
|
||||
|
||||
case llvm::Triple::wasm32:
|
||||
case llvm::Triple::wasm64:
|
||||
AddWebAssemblyTargetArgs(Args, CmdArgs);
|
||||
break;
|
||||
}
|
||||
|
||||
// The 'g' groups options involve a somewhat intricate sequence of decisions
|
||||
|
|
|
@ -82,6 +82,8 @@ private:
|
|||
llvm::opt::ArgStringList &CmdArgs) const;
|
||||
void AddHexagonTargetArgs(const llvm::opt::ArgList &Args,
|
||||
llvm::opt::ArgStringList &CmdArgs) const;
|
||||
void AddWebAssemblyTargetArgs(const llvm::opt::ArgList &Args,
|
||||
llvm::opt::ArgStringList &CmdArgs) const;
|
||||
|
||||
enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// A basic clang -cc1 command-line.
|
||||
// A basic clang -cc1 command-line. WebAssembly is somewhat special in
|
||||
// enabling -ffunction-sections, -fdata-sections, and -fvisibility=hidden by
|
||||
// default.
|
||||
|
||||
// RUN: %clang %s -### -target wasm32-unknown-unknown 2>&1 | FileCheck -check-prefix=CC1 %s
|
||||
// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} "-ffunction-sections" "-fdata-sections"
|
||||
// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} "-fvisibility" "hidden" {{.*}} "-ffunction-sections" "-fdata-sections"
|
||||
|
||||
// Ditto, but ensure that a user -fno-function-sections disables the
|
||||
// default -ffunction-sections.
|
||||
|
@ -21,7 +23,8 @@
|
|||
// LINK: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
|
||||
// LINK: lld{{.*}}" "-flavor" "ld" "[[temp]]" "-o" "a.out"
|
||||
|
||||
// A basic C link command-line with optimization.
|
||||
// A basic C link command-line with optimization. WebAssembly is somewhat
|
||||
// special in enabling --gc-sections by default.
|
||||
|
||||
// RUN: %clang -### -O2 -no-canonical-prefixes -target wasm32-unknown-unknown %s 2>&1 | FileCheck -check-prefix=LINK_OPT %s
|
||||
// LINK_OPT: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
|
||||
|
|
|
@ -13,34 +13,34 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
|||
|
||||
extern "C" {
|
||||
|
||||
// CHECK: @align_c = global i32 1
|
||||
// CHECK: @align_c = hidden global i32 1
|
||||
int align_c = __alignof(char);
|
||||
|
||||
// CHECK: @align_s = global i32 2
|
||||
// CHECK: @align_s = hidden global i32 2
|
||||
int align_s = __alignof(short);
|
||||
|
||||
// CHECK: @align_i = global i32 4
|
||||
// CHECK: @align_i = hidden global i32 4
|
||||
int align_i = __alignof(int);
|
||||
|
||||
// CHECK: @align_l = global i32 4
|
||||
// CHECK: @align_l = hidden global i32 4
|
||||
int align_l = __alignof(long);
|
||||
|
||||
// CHECK: @align_ll = global i32 8
|
||||
// CHECK: @align_ll = hidden global i32 8
|
||||
int align_ll = __alignof(long long);
|
||||
|
||||
// CHECK: @align_p = global i32 4
|
||||
// CHECK: @align_p = hidden global i32 4
|
||||
int align_p = __alignof(void*);
|
||||
|
||||
// CHECK: @align_f = global i32 4
|
||||
// CHECK: @align_f = hidden global i32 4
|
||||
int align_f = __alignof(float);
|
||||
|
||||
// CHECK: @align_d = global i32 8
|
||||
// CHECK: @align_d = hidden global i32 8
|
||||
int align_d = __alignof(double);
|
||||
|
||||
// CHECK: @align_ld = global i32 16
|
||||
// CHECK: @align_ld = hidden global i32 16
|
||||
int align_ld = __alignof(long double);
|
||||
|
||||
// CHECK: @align_vl = global i32 4
|
||||
// CHECK: @align_vl = hidden global i32 4
|
||||
int align_vl = __alignof(va_list);
|
||||
|
||||
// CHECK: _GNU_SOURCEdefined
|
||||
|
|
|
@ -13,34 +13,34 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
|||
|
||||
extern "C" {
|
||||
|
||||
// CHECK: @align_c = global i32 1
|
||||
// CHECK: @align_c = hidden global i32 1
|
||||
int align_c = __alignof(char);
|
||||
|
||||
// CHECK: @align_s = global i32 2
|
||||
// CHECK: @align_s = hidden global i32 2
|
||||
int align_s = __alignof(short);
|
||||
|
||||
// CHECK: @align_i = global i32 4
|
||||
// CHECK: @align_i = hidden global i32 4
|
||||
int align_i = __alignof(int);
|
||||
|
||||
// CHECK: @align_l = global i32 8
|
||||
// CHECK: @align_l = hidden global i32 8
|
||||
int align_l = __alignof(long);
|
||||
|
||||
// CHECK: @align_ll = global i32 8
|
||||
// CHECK: @align_ll = hidden global i32 8
|
||||
int align_ll = __alignof(long long);
|
||||
|
||||
// CHECK: @align_p = global i32 8
|
||||
// CHECK: @align_p = hidden global i32 8
|
||||
int align_p = __alignof(void*);
|
||||
|
||||
// CHECK: @align_f = global i32 4
|
||||
// CHECK: @align_f = hidden global i32 4
|
||||
int align_f = __alignof(float);
|
||||
|
||||
// CHECK: @align_d = global i32 8
|
||||
// CHECK: @align_d = hidden global i32 8
|
||||
int align_d = __alignof(double);
|
||||
|
||||
// CHECK: @align_ld = global i32 16
|
||||
// CHECK: @align_ld = hidden global i32 16
|
||||
int align_ld = __alignof(long double);
|
||||
|
||||
// CHECK: @align_vl = global i32 8
|
||||
// CHECK: @align_vl = hidden global i32 8
|
||||
int align_vl = __alignof(va_list);
|
||||
|
||||
// CHECK: _GNU_SOURCEdefined
|
||||
|
|
Loading…
Reference in New Issue