|
4.41A не различает одинаковые символы из разных namespace, баг? |
|
|
|
Nov 15 2007, 13:14
|
Знающий
   
Группа: Свой
Сообщений: 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 }
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
 |
Ответов
(1 - 11)
|
Nov 16 2007, 07:02
|

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

|
Цитата(dxp @ Nov 16 2007, 08:14)  Не уверен, что это баг. У вас тут объект в одном из пространств имен ничего не делает полезного, компилятор просто его оптимизировал - имеет полное право. Нагрузите его полезной работой. Хотя бы заведите вторую переменную:
volatile b = n2::flags; Не помогает, к сожалению. Нагружал как угодно и в проверки вставлял. Давал flags разные значения при инициализации. Воспринимается тот, который раньше используется в программе, второй игнорируется.
|
|
|
|
|
Nov 16 2007, 07:32
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
А если написать это в одном модуле: Код namespace n1 { int flag; }
namespace n2 { int flag; }
int main() { } При компиляции выдает: Internal Error: [CoreUtil/General]: OgModuleLabels -- label already defined IAR AVR 4.30
|
|
|
|
|
Nov 16 2007, 15:55
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
Цитата(IgorKossak @ Nov 16 2007, 19:15)  Кто может отписать это на IAR? На основании тестирования пробной 30-дневной версии можно? Легкий офтоп на тему посылки багрепортов в иар из личного опыта. Посылал как пользователь 30 дневной версии - реакции ноль. Через нашего человека (руководитель отдела разработки дебажных тулзов для мсп430) из германской площадки Тексаса послали багрепорт от лица официального пользователя. Прошло более полугода - в новой версии баг остался. На днях обнаружил новый баг, но посылать не буду, т.к. обнаруженные мной баги относятся к использованию шаблонов и похоже в иаре никого особо не интересуют. Припоминаю время, когда на иаре была конфа. Так вот там было несколько гневных тредов по поводу реакции иара на кастомерский фидбек.
|
|
|
|
|
Nov 16 2007, 16:20
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(dxp @ Nov 16 2007, 09:54)  Тогда действительно похоже на баг. Баг, баг. Я на него напарывался примерно полгода назад и мы его с тобой, кажется, обсуждали через ICQ. Еще один баг, но уже в C-SPY - он не различает статические члены в разных классах с одинаковыми именами. Он отбрассывает имя класса, и если статический член с таким именем в программе один, он его показывает в watch, если существуют два разных класса с одноименными статическими членами - говорит, что такого символа нет. Хотя компилирует правильно.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 19 2007, 07:36
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(ig_z @ Nov 16 2007, 18:55)  т.к. обнаруженные мной баги относятся к использованию шаблонов и похоже в иаре никого особо не интересуют. Вы зря так, очень даже интересует. P.J.Plauger выпустил книгу с названием типа "STL- стандартная библиотека шаблонов С++", даже на русском языке появляется (600 с лишним страниц). PS. В Help по IAR Вы видите Copyright © 1989-2002 by P.J. Plauger and Jim Brodie. All rights reserved.
|
|
|
|
|
Nov 20 2007, 10:37
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
Цитата(IgorKossak @ Nov 16 2007, 22:00)  Интересуют, озвучьте пожалуйста. Тестовый пример не делал, попробую объяснить на словах. Если попытаться генерить по шаблону статические члены класса (что то типа такого) Код template <int r> class ri_bu { public: static char get_count(){return count;};
private: static char count; };
class c1 : public ri_bu<1> {}; class c2 : public ri_bu<2> {}; --------------------------------------- char c1::ri_bu<1>::count = 1; char c2::ri_bu<2>::count = 2; то линкер выдает undef ext ... Если все поместить в один файл, то все ок. Если сделать те же классы без помощи шаблонов, все ок В MSVS все работает как нужно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|