[cfe-dev] Unreachable at IdentifierResolver.cpp:78 when friend-ing a using declaration

Stephen Lin stephenwlin at gmail.com
Sun Mar 10 14:18:40 PDT 2013


Hi,

I'm new to clang development but I think I've managed to find
and patch a small issue. I'm not sure what SOP is for this is, so I'm
sending a message here; if this is unnecessary in the future let me
know.

The code below crashes because Sema::CheckOverload assumes that a
function declaration is in the same semantic scope as the current
lexical scope whenever the latter is a record and tries to use member
using hiding rules:

struct A
{
    void delete_foo();
};

struct B : public A
{
    using A::delete_foo;
};

struct Foo { friend void B::delete_foo(); private: ~Foo() { } };

Similar results are obtained when "friend"-ing a using declaration
declared at namespace scope.

I added a small check to verify that the new function declaration is
actually in the same semantic scope as the current (record) scope: as
far as I can tell this can only affect "friend" declarations. The code
above now triggers an error "declaration conflicts with target of
using declaration already in scope" (I believe this is correct, g++
errors as well) rather than a crash, and added a test for this case.

Bug report at http://llvm.org/bugs/show_bug.cgi?id=15485 with patch attached.

Let me know if there's anything else I can do to help with this issue.

Thanks,
Stephen



More information about the cfe-dev mailing list