The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск набора компиляторов GCC 7.2, opennews (??), 15-Авг-17, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


3. "Выпуск набора компиляторов GCC 7.2"  +12 +/
Сообщение от Аноним (-), 15-Авг-17, 00:46 
Выкинуть нужно анонима. А gcc всё сделал правильно
Ответить | Правка | Наверх | Cообщить модератору
Часть нити удалена модератором

7. "Выпуск набора компиляторов GCC 7.2"  +2 +/
Сообщение от Crazy Alex (ok), 15-Авг-17, 01:36 
Ты полный пример можешь дать? И версию компилятора заодно...

Потому что при таком вызове arr у тебя измениться не может, только его содержимое.

Ответить | Правка | Наверх | Cообщить модератору

9. "Выпуск набора компиляторов GCC 7.2"  –3 +/
Сообщение от Аноним (-), 15-Авг-17, 01:58 
GCC6.3 и старая opera , моя прелесть
Ответить | Правка | Наверх | Cообщить модератору

12. "Выпуск набора компиляторов GCC 7.2"  +/
Сообщение от Orduemail (ok), 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 синтаксис. Но суть видна и так.

Ответить | Правка | Наверх | Cообщить модератору

18. "Выпуск набора компиляторов GCC 7.2"  –3 +/
Сообщение от Другойаноним (?), 15-Авг-17, 09:45 
Тем не менее,было такое дело , было  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49820
Ответить | Правка | Наверх | Cообщить модератору

28. "Выпуск набора компиляторов GCC 7.2"  +1 +/
Сообщение от pripolz (?), 15-Авг-17, 12:16 
так та бага вообще не о том.
Там юзер хотел "проверить int на переполнение". Ему и объяснили, что это UB.
Ответить | Правка | Наверх | Cообщить модератору

27. "Выпуск набора компиляторов GCC 7.2"  –1 +/
Сообщение от Iaaa (ok), 15-Авг-17, 12:16 
Можно было просто дать ссылку https://godbolt.org/g/Wy4TPn
И нагляднее, и проще.
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

29. "Выпуск набора компиляторов GCC 7.2"  +/
Сообщение от Аноним (-), 15-Авг-17, 13:08 
То есть ты сначала разыменовываешь указатель, а потом проверяешь, не нулевой ли он? Молодец, чё.
Ответить | Правка | Наверх | Cообщить модератору

52. "Выпуск набора компиляторов GCC 7.2"  +/
Сообщение от УЖАС СОВКА (?), 16-Авг-17, 12:57 
А в чем проблема ?? Если N<0, он и не разименовывается.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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