Blue Swirl <blauwir...@gmail.com> writes:

> On 3/15/10, Markus Armbruster <arm...@redhat.com> wrote:
>> Blue Swirl <blauwir...@gmail.com> writes:
>>
>>  > When building with -DNDEBUG, assert(0) will not stop execution
>>  > so it must not be used for abnormal termination.
>>
>>
>> For each case: are you sure the code does not recover after assert(0)?
>>  Not saying it does, just asking whether you checked.
>
> I had not checked but did just now,
>
> QEMU system emulators do not handle SIGABRT. The situation is
> different for user emulator, but then assert(0) and abort() would be
> equally correct or incorrect.

Please don't tell me that user emulators make abort() return.  abort()
is declared __noreturn__, and the optimizer may well rely on that.

>>  > Use cpu_abort() when in CPU context, abort() otherwise.
>>
>>
>> I sympathize with the general idea, but I don't like dead code after
>>  abort().  What about cleaning that up?
>
> Good idea, but it should be a separate patch. This patch is "safe",
> whereas the cleanup patch could cause problems if it's not done
> carefully.

I support keeping separate things separate.  However, separating
something like

                    if (mapping->first_mapping_index != first_mapping_index
                            && mapping->info.file.offset > 0) {
-                       assert(0);
+                        abort();
                        copy_it = 1;
                    }

from

                    if (mapping->first_mapping_index != first_mapping_index
                            && mapping->info.file.offset > 0) {
                        abort();
-                       copy_it = 1;
                    }

doesn't seem worth it.


Reply via email to