@@ -92,6 +92,7 @@ class TestLeakAutoVar : public TestFixture {
9292 TEST_CASE (assign20); // #9187
9393 TEST_CASE (assign21); // #10186
9494 TEST_CASE (assign22); // #9139
95+ TEST_CASE (assign23);
9596
9697 TEST_CASE (isAutoDealloc);
9798
@@ -463,6 +464,44 @@ class TestLeakAutoVar : public TestFixture {
463464 ASSERT_EQUALS (" [test.cpp:3]: (error) Memory leak: p\n " , errout.str ());
464465 }
465466
467+ void assign23 () {
468+ Settings s = settings;
469+ LOAD_LIB_2 (settings.library , " posix.cfg" );
470+ check (" void f() {\n "
471+ " int n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14;\n "
472+ " *&n1 = open(\" xx.log\" , O_RDONLY);\n "
473+ " *&(n2) = open(\" xx.log\" , O_RDONLY);\n "
474+ " *(&n3) = open(\" xx.log\" , O_RDONLY);\n "
475+ " *&*&n4 = open(\" xx.log\" , O_RDONLY);\n "
476+ " *&*&*&(n5) = open(\" xx.log\" , O_RDONLY);\n "
477+ " *&*&(*&n6) = open(\" xx.log\" , O_RDONLY);\n "
478+ " *&*(&*&n7) = open(\" xx.log\" , O_RDONLY);\n "
479+ " *(&*&n8) = open(\" xx.log\" , O_RDONLY);\n "
480+ " *&(*&*&(*&n9)) = open(\" xx.log\" , O_RDONLY);\n "
481+ " (n10) = open(\" xx.log\" , O_RDONLY);\n "
482+ " ((n11)) = open(\" xx.log\" , O_RDONLY);\n "
483+ " ((*&n12)) = open(\" xx.log\" , O_RDONLY);\n "
484+ " *(&(*&n13)) = open(\" xx.log\" , O_RDONLY);\n "
485+ " ((*&(*&n14))) = open(\" xx.log\" , O_RDONLY);\n "
486+ " }\n " , true );
487+ ASSERT_EQUALS (" [test.cpp:17]: (error) Resource leak: n1\n "
488+ " [test.cpp:17]: (error) Resource leak: n2\n "
489+ " [test.cpp:17]: (error) Resource leak: n3\n "
490+ " [test.cpp:17]: (error) Resource leak: n4\n "
491+ " [test.cpp:17]: (error) Resource leak: n5\n "
492+ " [test.cpp:17]: (error) Resource leak: n6\n "
493+ " [test.cpp:17]: (error) Resource leak: n7\n "
494+ " [test.cpp:17]: (error) Resource leak: n8\n "
495+ " [test.cpp:17]: (error) Resource leak: n9\n "
496+ " [test.cpp:17]: (error) Resource leak: n10\n "
497+ " [test.cpp:17]: (error) Resource leak: n11\n "
498+ " [test.cpp:17]: (error) Resource leak: n12\n "
499+ " [test.cpp:17]: (error) Resource leak: n13\n "
500+ " [test.cpp:17]: (error) Resource leak: n14\n " ,
501+ errout.str ());
502+ settings = s;
503+ }
504+
466505 void isAutoDealloc () {
467506 check (" void f() {\n "
468507 " char *p = new char[100];"
0 commit comments