[LLVMbugs] [Bug 9167] New: Linkage of anonymous tag types defined in typedefs should not be cached

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Feb 8 11:42:49 PST 2011


           Summary: Linkage of anonymous tag types defined in typedefs
                    should not be cached
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: -New Bugs
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: rjmccall at apple.com
                CC: llvmbugs at cs.uiuc.edu

The linkage of an anonymous tag type defined in a typedef can change. 
Currently we handle this by clearing the linkage cache for that tag and its
children, but it is quite possible to build arbitrary type expressions
involving that type, and we have no way of clearing the linkage of those types.
 dgregor points out that the only reasonable solution is to just not cache
linkage for tag types defined in typedefs until the end of the typedef.

The problem arises with things like this:

  template <class T> struct A { void foo(); };

  typedef struct {
    void foo() { A<decltype(this)>::foo(); }
  } B;

But also things like this:

  typedef struct {
    int x;
  } *B_ptr, B_returning_fn(A<B_ptr>), B;

Oh and by the way, you can put 'typedef' after the struct definition here, so
we just can't cache the linkage of anything involving an anonymous tag
definition until the end of that decl group.

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.

More information about the llvm-bugs mailing list