[Issue 18725] New: compiler does not check all levels of methods for privateness, if used in invariant

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Apr 4 13:22:02 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=18725

          Issue ID: 18725
           Summary: compiler does not check all levels of methods for
                    privateness, if used in invariant
           Product: D
           Version: D2
          Hardware: x86
                OS: Mac OS X
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: sascha.orlov at gmail.com

Given this

´´´
void main()
{
        auto s = S(); 
        assert(&s);  
}

struct S
{
        invariant
        {
                assert(fun); 
        }

        size_t[] member; 

        private bool fun() const
        {
                return fun1(); 
        }

        /*private*/ bool fun1() const
        {
                return true; 
        }
}
´´´

The code compiles with or without privateness of fun1. However, if the
privateness for fun1 is missing the run yields a segmentation fault, while when
it is present, the result is as expected. 

If privateness for fun is missing, the compiler complains about using it in the
invariant, as expected.

--


More information about the Digitalmars-d-bugs mailing list