The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск набора компиляторов GCC 7.2"
Отправлено Ordu, 15-Авг-17 04:03 
Это просто сотрясения воздуха, а не ответ на вопрос.

Смотри, берём такой код:

void foo(int);
int bar(int **);
void baz();

int main()
{
    int *arr;
    int arr_len = bar(&arr);
    for(int n = 0; n < arr_len; n ++)
        foo(arr[n]);
    if(arr)
        baz();
    return 0;
}

Вызываем gcc:
gcc -O2 -S tmp.c -Wall -fverbose-asm
Получаем:
main:
.LFB0:
    .cfi_startproc
    pushq    %rbp    #
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    pushq    %rbx    #
    .cfi_def_cfa_offset 24
    .cfi_offset 3, -24
    subq    $24, %rsp    #,
    .cfi_def_cfa_offset 48
    movq    %rsp, %rdi    #,
    movq    %fs:40, %rax    #, tmp106
    movq    %rax, 8(%rsp)    # tmp106, D.1788
    xorl    Йx, Йx    # tmp106
    call    bar    #
    testl    Йx, Йx    # arr_len
    jle    .L6    #,
    subl    $1, Йx    #, tmp101
    xorl    Кx, Кx    # ivtmp.7
    leaq    4(,%rax,4), %rbp    #, _26
    .p2align 4,,10
    .p2align 3
.L5:
    movq    (%rsp), %rax    # arr, arr
    movl    (%rax,%rbx), Мi    # *_10, *_10
    addq    $4, %rbx    #, ivtmp.7
    call    foo    #
    cmpq    %rbp, %rbx    # _26, ivtmp.7
    jne    .L5    #,
.L6:
    cmpq    $0, (%rsp)    #, arr
    je    .L4    #,
    xorl    Йx, Йx    #
    call    baz    #
.L4:
    xorl    Йx, Йx    #
    movq    8(%rsp), %rdx    # D.1788, tmp107
    xorq    %fs:40, %rdx    #, tmp107
    jne    .L11    #,
    addq    $24, %rsp    #,
    .cfi_remember_state
    .cfi_def_cfa_offset 24
    popq    %rbx    #
    .cfi_def_cfa_offset 16
    popq    %rbp    #
    .cfi_def_cfa_offset 8
    ret
.L11:
    .cfi_restore_state
    call    __stack_chk_fail    #
    .cfi_endproc
.LFE0:
    .size    main, .-main
    .ident    "GCC: (Gentoo 6.3.0 p1.0) 6.3.0"
    .section    .note.GNU-stack,"",@progbits

Метка .L6 это тот самый if, который по твоим словам должен быть выкинут из-за UB. И мы чётко видим, что он не выкидывается.

edit: форум смешно покорёжил att синтаксис. Но суть видна и так.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру