A gcc puzzle for the experts
Chris Pressey
cpressey at catseye.mine.nu
Tue Jan 25 16:54:14 PST 2005
On Tue, 25 Jan 2005 16:24:42 -0800
walt <wa1ter at xxxxxxxxxxxxx> wrote:
> The problem is that the gnomevfs2 port won't compile on my
> gcc34 machine, but compiles perfectly on the gcc2 machine
> and on FreeBSD-CURRENT (gcc 3.4.2).
>
> This is the error:
> cdda-method.c:647: error: syntax error before "else"
>
> and this is the offending code:
>
> /* Check and see if we already have opened and stashed this drive */
> if (!use_base) {
> if (global_context != NULL) {
> #ifdef __linux__
> if (strcmp (drive->cdda_device_name,
> global_context->drive->cdda_device_name) == 0) {
> #elif defined(__FreeBSD__)
> if (strcmp (drive->dev->device_path,
> global_context->drive->dev->device_path) == 0) {
> #endif
This is not a very good use of conditional-compilation directives...
If neither __linux__ nor __FreeBSD__ is defined, there will be no 'if'!
Which of course means 'else' will be a syntax error :)
> use_cache = TRUE;
> cdda_close (drive);
> gnome_vfs_file_info_copy (file_info,
> global_context->file_info);
> } else {
> /* We have a new drive. */
> cdda_context_free (global_context);
> global_context = cdda_context_new (drive, uri);
> cdda_set_file_info_for_root (global_context,
> uri);
> gnome_vfs_file_info_copy (file_info,
> global_context->file_info);
> }
> } else { <======== line 647
> /* Create a new context */
> global_context = cdda_context_new (drive, uri);
> <remainder of sourcefile snipped>
>
> The error occurs even if I change __FreeBSD__ to __DragonFly__ because
> the error is a *syntax* error, not an undefined symbol or missing header.
What happens if you change the #elif line to just "#else" ?
> So, anyone have a clue what is wrong -- anyone else getting the same error?
>
>
-Chris
More information about the Users
mailing list