gcc 4.5.1

Nov 02, 2010 16:55

Поставил сабж попробовать (полчаса собирался или час?), злобные шаблоны вроде boost.spirit компилит раза в три быстрее, очень очень.

Правда вот, anight, ты, кажется, там баг находил нехороший, расскажи-ка мне.

work

Leave a comment

Comments 5

mr_aleph November 2 2010, 14:29:09 UTC
я находил там мерзкий баг с неправильной протяжкой типов через memcpy из-за чего сходит с ума aliasing analysis и начинает где попало вычищать записи в поля =)

Reply

antoxa November 2 2010, 14:31:46 UTC
"протяжкой типов через memcpy" - это что имеется в виду?

Reply

mr_aleph November 2 2010, 14:33:29 UTC
когда ты копируешь область памяти в которой лежит нечто типа T, в другую область памяти, то анализ должен просекать, что в целевой области памяти теперь тоже лежит нечто типа Т (плюс все "атрибуты" свойственные исходному объекту тоже должны копироваться).

у нас есть место где делался memcpy указателя из одной области памяти в другую... при этом терялась информация, что исходный указатель может указывать "куда-угодно", и компилятор начинал считать, что указатель (из целевой памяти) указывает только на локальные переменные... или что-то типа того =)

Reply


anight November 2 2010, 16:58:57 UTC
это даже не 4.5

там где-то между 4.1 и 4.3 грабли закопаны

суть в кратце в следующем - если у тебя есть какой-то произвольный свой аллокатор, то gcc делает какие-то свои, непонятно на чём основанные предположения касательно выравнивания возвращаемой памяти.

соответственно, потом когда ты записываешь в эту память - программа падает при попытке использовать SSE инструкции с 16-байтовым выравниванием.

если сменить выравнивание в аллокаторе или версию gcc - проблема исчезает.

если очень интересно могу попробовать сделать простой test case.

Reply


_zerg November 2 2010, 17:25:37 UTC
Попробуем как скомпилировать и boost.spirit и свои шаблоны...

Reply


Leave a comment

Up