Author: rnk Date: Wed Oct 21 17:01:02 2015 New Revision: 250954 URL: http://llvm.org/viewvc/llvm-project?rev=250954&view=rev Log: [Driver] Alias -fvisibility=internal to -fvisibility=hidden
The ELF symbol visibilities are: - internal: Not visibile across DSOs, cannot pass address across DSOs - hidden: Not visibile across DSOs, can be called indirectly - default: Usually visible across DSOs, possibly interposable - protected: Visible across DSOs, not interposable LLVM only supports the latter 3 visibilities. Internal visibility is in theory useful, as it allows you to assume that the caller is maintaining a PIC register for you in %ebx, or in some other pre-arranged location. As far as LLVM is concerned, this isn't worth the trouble. Using hidden visibility is always correct, so we can just do that. Resolves PR9183. Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/test/CodeGenCXX/visibility.cpp Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=250954&r1=250953&r2=250954&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Wed Oct 21 17:01:02 2015 @@ -1296,7 +1296,7 @@ static Visibility parseVisibility(Arg *a StringRef value = arg->getValue(); if (value == "default") { return DefaultVisibility; - } else if (value == "hidden") { + } else if (value == "hidden" || value == "internal") { return HiddenVisibility; } else if (value == "protected") { // FIXME: diagnose if target does not support protected visibility Modified: cfe/trunk/test/CodeGenCXX/visibility.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/visibility.cpp?rev=250954&r1=250953&r2=250954&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/visibility.cpp (original) +++ cfe/trunk/test/CodeGenCXX/visibility.cpp Wed Oct 21 17:01:02 2015 @@ -1,5 +1,8 @@ // RUN: %clang_cc1 %s -std=c++11 -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s // RUN: %clang_cc1 %s -std=c++11 -triple=x86_64-apple-darwin10 -fvisibility hidden -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-HIDDEN +// For clang, "internal" is just an alias for "hidden". We could use it for some +// optimization purposes on 32-bit x86, but it's not worth it. +// RUN: %clang_cc1 %s -std=c++11 -triple=x86_64-apple-darwin10 -fvisibility internal -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-HIDDEN #define HIDDEN __attribute__((visibility("hidden"))) #define PROTECTED __attribute__((visibility("protected"))) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits