• Jason Rhinelander's avatar
    Prevent overwriting previous declarations · 6873c202
    Jason Rhinelander authored
    Currently pybind11 doesn't check when you define a new object (e.g. a
    class, function, or exception) that overwrites an existing one.  If the
    thing being overwritten is a class, this leads to a segfault (because
    pybind still thinks the type is defined, even though Python no longer
    has the type).  In other cases this is harmless (e.g. replacing a
    function with an exception), but even in that case it's most likely a
    bug.
    
    This code doesn't prevent you from actively doing something harmful,
    like deliberately overwriting a previous definition, but detects
    overwriting with a run-time error if it occurs in the standard
    class/function/exception/def registration interfaces.
    
    All of the additions are in non-template code; the result is actually a
    tiny decrease in .so size compared to master without the new test code
    (977304 to 977272 bytes), and about 4K higher with the new tests.
    6873c202
test_issues.cpp 11.2 KB