Bug 40064 - Windows msvc compile problem
Summary: Windows msvc compile problem
Status: RESOLVED FIXED
Alias: None
Product: dbus
Classification: Unclassified
Component: core (show other bugs)
Version: 1.5
Hardware: Other Windows (All)
: medium blocker
Assignee: Simon McVittie
QA Contact: John (J5) Palmieri
URL:
Whiteboard:
Keywords: patch
Depends on:
Blocks:
 
Reported: 2011-08-13 13:38 UTC by Ralf Habacker
Modified: 2011-08-15 11:01 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Attachments
Fix compilation of (no-op) alignment assertions on non-gcc (1.07 KB, patch)
2011-08-15 02:33 UTC, Simon McVittie
Details | Splinter Review

Description Ralf Habacker 2011-08-13 13:38:35 UTC
In dbus 1.4 branch a compile error with msvc compilers happens.

-- Configuring done
-- Generating done
-- Build files have been written to: K:/vc100d/build/win32libs-sources/dbus-src-1.4.10-20110302/work/msvc2010-Debug-1.4.14
entering: k:\vc100d\build\win32libs-sources\dbus-src-1.4.10-20110302\work\msvc2010-Debug-1.4.14
[  0%] Building C object dbus/CMakeFiles/dbus-1.dir/k_/vc100d/git/dbus-src-git/dbus/dbus-marshal-basic.obj
dbus-marshal-basic.c
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(41) : error C2059: Syntaxfehler: 'do'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(41) : error C2059: Syntaxfehler: 'while'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(44) : error C2059: Syntaxfehler: 'do'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(44) : error C2059: Syntaxfehler: 'while'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(46) : error C2059: Syntaxfehler: 'do'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(46) : error C2059: Syntaxfehler: 'while'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(49) : error C2059: Syntaxfehler: 'do'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(49) : error C2059: Syntaxfehler: 'while'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(51) : error C2059: Syntaxfehler: 'do'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(51) : error C2059: Syntaxfehler: 'while'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(53) : error C2059: Syntaxfehler: 'do'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(53) : error C2059: Syntaxfehler: 'while'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(56) : error C2059: Syntaxfehler: 'do'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(56) : error C2059: Syntaxfehler: 'while'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(60) : error C2059: Syntaxfehler: 'do'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(60) : error C2059: Syntaxfehler: 'while'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(62) : error C2059: Syntaxfehler: 'do'
k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c(62) : error C2059: Syntaxfehler: 'while'
NMAKE : fatal error U1077: "C:\PROGRA~1\MICROS~1.0\VC\bin\cl.exe": Rückgabe-Code "0x2"

k:\vc100d\git\dbus-src-git\dbus\dbus-marshal-basic.c
line 32ff
#if defined(__GNUC__) && (__GNUC__ >= 4)
# define _DBUS_ASSERT_ALIGNMENT(type, op, val) \
  _DBUS_STATIC_ASSERT (__extension__ __alignof__ (type) op val)
#else
# define _DBUS_ASSERT_ALIGNMENT(type, op, val) do { } while (0)
#endif

line 39ff
/* True by definition, but just for completeness... */
_DBUS_STATIC_ASSERT (sizeof (char) == 1);
_DBUS_ASSERT_ALIGNMENT (char, ==, 1);


The compile error is caused by the following line 
# define _DBUS_ASSERT_ALIGNMENT(type, op, val) do { } while (0)
Comment 1 Ralf Habacker 2011-08-13 13:49:13 UTC
> The compile error is caused by the following line 
> # define _DBUS_ASSERT_ALIGNMENT(type, op, val) do { } while (0)

The preprocessed code show the main cause - there is a do while loop outside of any function as shown below: 

typedef struct { char _assertion[(sizeof (char) == 1) ? 1 : -1]; } _DBUS_STATIC_ASSERT_40;
do { } while (0);
Comment 2 Simon McVittie 2011-08-15 02:33:10 UTC
Created attachment 50220 [details] [review]
Fix compilation of (no-op) alignment assertions on non-gcc

This patch should hopefully work?

---

Subject: [PATCH] Fix compilation of (no-op) alignment assertions on non-gcc

do {} while (0) isn't valid at file scope, so the non-gcc code path
was broken; in particular, this affected MSVC.
Comment 3 Ralf Habacker 2011-08-15 08:36:01 UTC
(In reply to comment #2)
> Created an attachment (id=50220) [details]
> Fix compilation of (no-op) alignment assertions on non-gcc
> 
> This patch should hopefully work?
> 
yes, I applied and pushed this patch according to your hints to upstream dbus-1.4

To be sure, now I have to merge dbus-1.4 into master and push master upstream ?
Comment 4 Simon McVittie 2011-08-15 08:51:01 UTC
(In reply to comment #3)
> To be sure, now I have to merge dbus-1.4 into master and push master upstream ?

Yes please.
Comment 5 Ralf Habacker 2011-08-15 11:01:07 UTC
(In reply to comment #4)
> (In reply to comment #3)
> > To be sure, now I have to merge dbus-1.4 into master and push master upstream ?
> 
> Yes please.

done, merging worked as expected.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.