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

Reply via email to