Opened 7 years ago

Closed 7 years ago

Last modified 7 years ago

#94 closed ожидаются исправления (задача сдана)

Linked_ptr

Reported by: Alexander Owned by: Vladimir Rutsky
Priority: проверка Milestone:
Component: HA#3 linked_ptr Version:
Keywords: Cc:

Description

Здравствуйте, Владимир.

Прошу проверить задание 3.
Также прошу все же проверить задание 2, с первого майлстоуна все же висит.
Спасибо.

С уважением,
Александр

Change History (26)

comment:1 Changed 7 years ago by cpptester

Type: ожидается проверкаожидаются исправления

Smoke tests

test

stage

result

info

log

run_linked_ptr_gen_smoke_test.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

run_linked_ptr_gen_smoke_test-run.log

run_smoke_test.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

Common header used in some tests: common.h

comment:2 Changed 7 years ago by Alexander

Type: ожидаются исправленияожидается проверка

comment:3 Changed 7 years ago by cpptester

Type: ожидается проверкаожидаются исправления

Tested revision 540 by bzikadze.aleksandr.

Smoke tests

test

stage

result

info

log

run_linked_ptr_gen_smoke_test.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

run_linked_ptr_gen_smoke_test-run.log

run_smoke_test.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

Common header used in some tests: common.h

comment:4 Changed 7 years ago by cpptester

Tested revision 630 by bzikadze.aleksandr.

Smoke tests

test

stage

result

info

log

run_linked_ptr_gen_smoke_test.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_linked_ptr_gen_smoke_test-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_linked_ptr_gen_smoke_test-asan.log

clang-san

SUCCESS

san

FAILURE

exit code 1

run_linked_ptr_gen_smoke_test-san.log

run_smoke_test.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

Common header used in some tests: common.h

comment:5 Changed 7 years ago by cpptester

Tested revision 631 by bzikadze.aleksandr.

Smoke tests

test

stage

result

info

log

run_linked_ptr_gen_smoke_test.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_linked_ptr_gen_smoke_test-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_linked_ptr_gen_smoke_test-asan.log

clang-san

SUCCESS

san

FAILURE

exit code 1

run_linked_ptr_gen_smoke_test-san.log

run_smoke_test.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

Common header used in some tests: common.h

comment:6 Changed 7 years ago by cpptester

Tested revision 636 by bzikadze.aleksandr.

Smoke tests

test

stage

result

info

log

run_smoke_test.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_smoke_test-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_smoke_test-asan.log

clang-san

SUCCESS

san

FAILURE

exit code 1

run_smoke_test-san.log

Common header used in some tests: common.h

comment:8 Changed 7 years ago by cpptester

Tested revision 641 by bzikadze.aleksandr.

Main tests

test

stage

result

info

log

ncomp_assign_derived.cpp

gcc62

FAILURE

ncomp_cmp_different_types1.cpp

gcc62

FAILURE

ncomp_cmp_different_types2.cpp

gcc62

FAILURE

ncomp_copy_ctor_from_base1.cpp

gcc62

FAILURE

ncomp_copy_ctor_from_base1_polymorphic.cpp

gcc62

FAILURE

ncomp_copy_ctor_from_base2.cpp

gcc62

FAILURE

ncomp_copy_ctor_from_base2_polymorphic.cpp

gcc62

FAILURE

ncomp_ctor_from_base.cpp

gcc62

FAILURE

ncomp_equal_different_types.cpp

gcc62

FAILURE

ncomp_incomplete_type1.cpp

gcc62

FAILURE

Common header used in some tests: common.h

comment:9 Changed 7 years ago by cpptester

Tested revision 643 by bzikadze.aleksandr.

Smoke tests

test

stage

result

info

log

run_linked_ptr_gen_smoke_test.cpp

gcc62

SUCCESS

run

WARNING

run_linked_ptr_gen_smoke_test-run.log

valgrind

WARNING

run_linked_ptr_gen_smoke_test-valgrind.log

gcc62-asan

SUCCESS

asan

WARNING

run_linked_ptr_gen_smoke_test-asan.log

clang-san

SUCCESS

san

WARNING

run_linked_ptr_gen_smoke_test-san.log

run_smoke_test.cpp

gcc62

SUCCESS

run

WARNING

run_smoke_test-run.log

valgrind

WARNING

run_smoke_test-valgrind.log

gcc62-asan

SUCCESS

asan

WARNING

run_smoke_test-asan.log

clang-san

SUCCESS

san

WARNING

run_smoke_test-san.log

Common header used in some tests: common.h

comment:10 Changed 7 years ago by cpptester

Tested revision 644 by bzikadze.aleksandr.

Main tests

test

stage

result

info

log

ncomp_assign_derived.cpp

gcc62

FAILURE

ncomp_cmp_different_types1.cpp

gcc62

FAILURE

ncomp_cmp_different_types2.cpp

gcc62

FAILURE

ncomp_copy_ctor_from_base1.cpp

gcc62

FAILURE

ncomp_copy_ctor_from_base1_polymorphic.cpp

gcc62

FAILURE

ncomp_copy_ctor_from_base2.cpp

gcc62

FAILURE

ncomp_copy_ctor_from_base2_polymorphic.cpp

gcc62

FAILURE

ncomp_ctor_from_base.cpp

gcc62

FAILURE

ncomp_equal_different_types.cpp

gcc62

FAILURE

ncomp_include_iostream.cpp

gcc62

FAILURE

Common header used in some tests: common.h

comment:11 Changed 7 years ago by cpptester

Tested revision 650 by bzikadze.aleksandr.

Smoke tests

test

stage

result

info

log

run_smoke_test.cpp

gcc62

FAILURE

run_smoke_test-gcc62.log

Common header used in some tests: common.h

comment:14 Changed 7 years ago by cpptester

Tested revision 666 by bzikadze.aleksandr.

All tests passed. Good job!

comment:15 Changed 7 years ago by Vladimir Rutsky

Type: ожидаются исправленияожидается проверка

comment:16 Changed 7 years ago by Vladimir Rutsky

Resolution: задача сдана
Status: newclosed

Решение зачтено.

Бонусное задание не выполнено.

Тест для бонусного задания (должен компилироваться без предупреждений):

#include "linked_ptr.hpp"

struct C;

int main()
{
    // Should compile. Completeness of C is not needed.
    smart_ptr::linked_ptr<C> p1;
    smart_ptr::linked_ptr<C> p2(p1);

    // Shouldn't compile:
    //smart_ptr::linked_ptr<C> p3(reinterpret_cast<C *>(123));
    //p1.reset(reinterpret_cast<C *>(123));
}

comment:17 Changed 7 years ago by Alexander

Resolution: задача сдана
Status: closedreopened

comment:18 Changed 7 years ago by cpptester

Tested revision 687 by bzikadze.aleksandr.

All tests passed. Good job!

comment:19 Changed 7 years ago by Alexander

Оставил вопрос в комментарии перед конструктором от указателя по поводу, почему решение (если оно верное) работает.
Так, задача не сдана еще, самое главное про предупреждения не заметил :)

Last edited 7 years ago by Alexander (previous) (diff)

comment:20 Changed 7 years ago by cpptester

Type: ожидается проверкаожидаются исправления

Tested revision 691 by bzikadze.aleksandr.

Smoke tests

test

stage

result

info

log

run_linked_ptr_gen_smoke_test.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

SUCCESS

run_linked_ptr_gen_smoke_test-valgrind.log

gcc62-asan

SUCCESS

asan

SUCCESS

clang-san

WARNING

run_linked_ptr_gen_smoke_test-clang-san.log

san

SUCCESS

run_smoke_test.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

SUCCESS

run_smoke_test-valgrind.log

gcc62-asan

SUCCESS

asan

SUCCESS

clang-san

WARNING

run_smoke_test-clang-san.log

san

SUCCESS

Common header used in some tests: common.h

comment:21 Changed 7 years ago by Vladimir Rutsky

Александр,

Vladimir, is it true, that method of a template class that is known (at compile time)
not to be used is not even generated and that is why it works?

Неиспользуемые шаблонные сущности (методы шаблонного класса, шаблонные методы или функции) не генерируются и не записываются в объектный модуль, но при этом компилятор может проверить их компилируемость.
Если поискать в интернете, то можно найти цитату из Стандарта C++ (14.6 [temp.res]/8):

If no valid specialization can be generated for a template definition, and that template is not instantiated, the template definition is ill-formed, no diagnostic required.

Т.е. если шаблонная сущность никогда не может быть корректна инстанциирована, то это ошибочный код.
Но проверить, существуют ли параметры, приводящие к валидной инстанциации, часто сложно (или даже невозможно), поэтому Стандарт не требует от компилятора выводить сообщение об ошибке.
Что-то компилятор может проверить, например, про static_assert(false, "") g++/clang всегда ругаются.
Некоторые компиляторы, например, старые версии Visual Studio, просто не смотрят на содержимое неиспользуемых шаблонных методов, и там можно хоть кириллицей написать мама-мыла-раму, он это скомпилирует (пока соответствующий метод не будет использоваться).

Текущее закоммиченное решение (ревизия 687) некорректно, т.к. например оно скомпилирует следующий код с предупреждениями (которые фактически выльются в ошибки):

#include "linked_ptr.hpp"

struct C;

void free_pointer(smart_ptr::linked_ptr<C> & ptr)
{
  ptr.reset();
}

int main()
{
}

comment:22 Changed 7 years ago by cpptester

Tested revision 694 by bzikadze.aleksandr.

All tests passed. Good job!

comment:23 Changed 7 years ago by Alexander

Утверждается, что текущее решение должно быть корректным. Посмотрите, пожалуйста.

comment:24 Changed 7 years ago by Vladimir Rutsky

Сейчас вы удаляете объект, только если в данной единице трансляции он был полным, что приведёт к утечке памяти, если передать построенный объект из другой единицы трансляции и попытаться уничтожить его в первой единице трансляции.

comment:25 Changed 7 years ago by Vladimir Rutsky

Resolution: задача сдана
Status: reopenedclosed

comment:26 Changed 7 years ago by Vladimir Rutsky

Milestone: ha3-milestone1

Milestone ha3-milestone1 deleted

Note: See TracTickets for help on using tickets.