Skip to content
  • Chandler Carruth's avatar
    Fix two rather subtle internal vs. external linker issues. · c60fbe6b
    Chandler Carruth authored
    I'll admit I'm not entirely satisfied with this change, but it seemed
    the cleanest option. Other suggestions quite welcome
    
    The issue is that the traits specializations have static methods which
    return the typedef'ed PHI_iterator type. In both the IR and MI layers
    this is typedef'ed to a custom iterator class defined in an anonymous
    namespace giving the types and the functions returning them internal
    linkage. However, because the traits specialization is defined in the
    'llvm' namespace (where it has to be, specialized template lives there),
    and is in turn used in the templated implementation of the SSAUpdater.
    This led to the linkage conflict that Clang now warns about.
    
    The simplest solution to me was just to define the PHI_iterator as
    a nested class inside the trait specialization. That way it still
    doesn't get scoped widely, it can't be accidentally reused somewhere,
    etc. This is a little gross just because nested class definitions are
    a little gross, but the alternatives seem more ad-hoc.
    
    llvm-svn: 158799
    c60fbe6b
Loading