http://llvm.org/bugs/show_bug.cgi?id=12001
Bug #: 12001
Summary: Visibility attribute ignored on a type that's used in
a function prototype earlier
Product: clang
Version: unspecified
Platform: PC
OS/Version: All
Status: NEW
Severity: enhancement
Priority: P
Component: C++
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected], [email protected]
Classification: Unclassified
$ cat repro-weak-private-external.ii
template <typename BoundArgsType>
struct BindState;
template <typename P1>
struct BindState<void(P1)> {
};
template <typename P1>
void Bind(const P1& p1) {
BindState<void(P1)>();
}
class Version;
void CheckPnaclComponentManifest(Version* version_out); // With this line:
private. Without: not.
class __attribute__((visibility("default"))) Version { };
void f() {
Bind(Version());
}
$ Release+Asserts/bin/clang -c repro-weak-private-external.ii
-fvisibility=hidden && nm -m repro-weak-private-external.o | grep
__Z4BindI7VersionEvRKT_
0000000000000020 (__TEXT,__textcoal_nt) weak private external
__Z4BindI7VersionEvRKT_
0000000000000070 (__TEXT,__eh_frame) weak private external
__Z4BindI7VersionEvRKT_.eh
Note that the symbol is "weak private external. If the
CheckPnaclComponentManifest() line is removed however, it beomces "weak
external".
This is (I think) because the CheckPnacl... function decl calls
computeCachedProperties() in Type.cpp for the function type, which calls
computeCachedProperties() or the argument type. When f() is being compiled, it
then uses the cached value, which doesn't know about the explicit visibility
yet.
(This prevents the chromium component build from working on mac, see
http://crbug.com/113934)
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs