реклама на сайте
подробности

 
 
> 4.41A не различает одинаковые символы из разных namespace, баг?
vet
сообщение Nov 15 2007, 13:14
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Тестовый пример:
Цитата(n1.cpp)
Код
namespace n1 {
  int flags;
}

Цитата(n2.cpp)
Код
namespace n2 {
  int flags;
}

Цитата(main.cpp)
Код
namespace n1 {
extern int flags;
}
namespace n2 {
extern int flags;
}

volatile int a;

int main()
{
  a = n1::flags;
  a = n2::flags;
  return 0;
}

Что видим в листинге (взят тулчейн для AVR, с ARM то же самое):
Цитата(main.s90)
Код
`?<Name n1 0>`      SYMBOL "n1"
flags               SYMBOL "flags", `?<Name n1 0>`

        EXTERN flags
...
        RSEG CODE:CODE:NOROOT(1)
//   13 int main()
main:
//   14 {
//   15   a = n1::flags;
        LDI     R30, LOW(flags)
        LDI     R31, (flags) >> 8
        LD      R16, Z
        LDD     R17, Z+1
        LDI     R30, LOW(a)
        LDI     R31, (a) >> 8
        ST      Z, R16
        STD     Z+1, R17
//   16   a = n2::flags;
        LDI     R30, LOW(flags)
        LDI     R31, (flags) >> 8
        LD      R16, Z
        LDD     R17, Z+1
        LDI     R30, LOW(a)
        LDI     R31, (a) >> 8
        ST      Z, R16
        STD     Z+1, R17
//   17   return 0;
        LDI     R16, 0
        LDI     R17, 0
        RET
//   18 }


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Nov 16 2007, 06:14
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(vet @ Nov 15 2007, 19:14) *
Тестовый пример:
Что видим в листинге (взят тулчейн для AVR, с ARM то же самое):

Не уверен, что это баг. У вас тут объект в одном из пространств имен ничего не делает полезного, компилятор просто его оптимизировал - имеет полное право. Нагрузите его полезной работой. Хотя бы заведите вторую переменную:

volatile b = n2::flags;


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 16 2007, 07:02
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(dxp @ Nov 16 2007, 08:14) *
Не уверен, что это баг. У вас тут объект в одном из пространств имен ничего не делает полезного, компилятор просто его оптимизировал - имеет полное право. Нагрузите его полезной работой. Хотя бы заведите вторую переменную:

volatile b = n2::flags;

Не помогает, к сожалению.
Нагружал как угодно и в проверки вставлял.
Давал flags разные значения при инициализации.
Воспринимается тот, который раньше используется в программе, второй игнорируется.
Go to the top of the page
 
+Quote Post
dxp
сообщение Nov 16 2007, 07:54
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(IgorKossak @ Nov 16 2007, 13:02) *
Не помогает, к сожалению.
Нагружал как угодно и в проверки вставлял.
Давал flags разные значения при инициализации.
Воспринимается тот, который раньше используется в программе, второй игнорируется.

Тогда действительно похоже на баг.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 11:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016