Я пишу крошечное ядро на c ++ 11 и имею два экземпляра одного и того же типа, которые должны быть созданы до создания любых других статических объектов.
Код, который я написал, выглядит следующим образом:
// test.hpp
class test {
// blahblah...
};
// test.cpp
typedef char fake_inst[sizeof(test)] __attribute__((aligned(alignof(test))));
fake_inst inst1;
fake_inst inst2;
// main.cpp
extern test inst1;
extern test inst2;
int kmain() {
// copy data section
// initialize bss section
new (&inst1) test();
new (&inst2) test();
// call constructors in .init_array
// kernel stuffs
}
Он собирается и работает, как и ожидалось, без предупреждающих сообщений, но не с LTO.
Я получаю тонны предупреждающих сообщений с жалобами на соответствие типов, и мне интересно, есть ли обходной путь, так каксмущает меня, чтобы найти другие «настоящие» предупреждения или сообщения об ошибках.
Любое предложение?