vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Вот такую странную картину я тут наблюдаю:

Debian testing, gcc 8.2.0. Имеется вот такой C-шный код:
static void log (int elevel,  const char *fmt, va_list args)
{
 bool write_to_file, write_to_stderr, write_somewhere_else;
 va_list error_args, std_args;
.... здесь вычисляем куда надо писать
if (write_to_file && write_to_stderr) 
  va_copy(std_args,args);

.... некоторое количество кода, заведомо не меняющего флагов write_to
if (write_to_file) {
   vfprintf(f,fmt, args);
}
if (write_to_stderr) {
   if (write_to_file) {
      vfprintf(stderr, fmt, std_args);
   } else {
      vfprintf(stderr,fmt,args);
   }
   ffush(stderr);
}


В 64-битной системе компилятор кушает этот код без вопросов. В 32-битной ругается

error: ‘std_args’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
vfprintf(stderr, fmt, std_args);

Нет, я понимаю, что макросы для va_* могут быть реализованы по разному в зависимости от архитектуры процессора, но не до такой же степени...

Date: 2018-12-10 11:06 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
Ну, оно невкусное, да. В общем-то как и большинство лекарств.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

June 2025

S M T W T F S
1 23 4 56 7
89 1011 12 13 14
15161718192021
22232425262728
2930     

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 15th, 2025 01:59 am
Powered by Dreamwidth Studios