Tag Archives: visual studio

Warning C4103 in Visual Studio 2010 is broken?

A few days ago my colleagues came across a very nasty bug caused by a header changing struct alignment (my apologies, this post is only available in Russian at the moment). In short, we were never supposed to have that problem in the first place as compiler should have given us a warning C4103.

But it didn’t. (Best said in Jeremy Clarkson voice).

Consider this header

// dummyHeader.h
#pragma  pack(push, 1)
			struct Dummy
			{
				int a;
				char b;
				short c;
			};
// oops, #pragma pack(pop) is missing..

The problem is fairly obvious – it changes struct alignment without restoring it back. Side effects of it include scary debug runtime check assertion, buffer overruns, sudden hard disk formatting and reactor core meltdowns.

Let’s include this header:

#include "DummyHeader.h"

#include "SomeOtherHeader.h"

And compile. As expected, compiler is not happy at all:

warning C4103: ‘test.cpp’ : alignment changed after including header, may be due to missing #pragma pack(pop)

Now, do the magic trick of changing the order in which headers are included

#include "SomeOtherHeader.h"
#include "DummyHeader.h"

Now it compiles without warnings.

I played with it for hours and could only get compiler to produce a warning when the offending header was on the top of the list.

I have only one thing to say – WTF?

P.S:
Microsoft Visual Studio 2010
Version 10.0.30319.1 RTMRel

P.P.S:
Visual Studio SP1Rel appears to be free of this problem

(Русский) Workaround day

Sorry, this entry is only available in Russian.

(Русский) A day at the work. Untold story about good, bad and boost.

Sorry, this entry is only available in Russian.

(Русский) Visual Studio 2010: Not so nice improvements in TR1

Sorry, this entry is only available in Russian.

(Русский) Кто о чем, а я о работе

Sorry, this entry is only available in Russian.

(Русский) Студия 2010: дневник мыши, поедающей кактус

Sorry, this entry is only available in Russian.

0 visitors online now
0 guests, 0 bots, 0 members