bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-apl] More Solaris porting issues


From: Elias Mårtenson
Subject: [Bug-apl] More Solaris porting issues
Date: Wed, 2 Apr 2014 18:32:53 +0800

As it turns out, I must use the Solaris Studio compiler to take advantage of OpenMP on Solaris. This compiler is much more picky in terms of not allowing certain non-standard constructs.

Here are the problems I've had:

Enum values must be a long or unsigned long

In SystemLimits.hh, LARGE_INT and SMALL_INT are declared as type long long (with the LL suffix). This is actually not allowed.

I would like to suggest using a namespace and constant variables instead. (if this is done in other cases as well, this would get rid of all the warnings the compiler emits when assigning a value to an enum that has not been previously declared).

Zero-size arrays are not allowed

In CDR_string.hh, the dim member is declared of size 0. This is allowed by GCC as an extension, but is non-standard. There is an flag that enables this extension in the Solaris compiler too, but it may be a good idea to remove this altogether if possible.

If not, the Solaris Studio flag that is needed is: -features=zla

The same thing happens in ValueHistory.cc when value history is disabled (since VALUEHISTORY_SIZE becomes 0).

C++ does not support non-constant array sizes

Declaring an array with a size computed at runtime is not actually allowed (it's supported in modern C, and also supported in C++ as an extension).

The solution is to use alloca() instead. I.e, change the following:

int foo[bar];

to:

int *foo = (int *)alloca(sizeof(int) * bar);

This happens at:

The option -g2 is illegal, in src/APs/Makefile

I'm not sure what this option does even in GCC, but Solaris Studio does not accept it.

Overloading ambiguity for maths functions

The following errors are fixed by casting the inner argument to double:

"IntCell.cc", line 222: Error: Overloading ambiguity between "std::exp(double)" and "std::exp(float)".
"IntCell.cc", line 234: Error: Overloading ambiguity between "std::log(double)" and "std::log(float)".
"IntCell.cc", line 234: Error: Overloading ambiguity between "std::log(double)" and "std::log(float)".
"IntCell.cc", line 230: Error: Overloading ambiguity between "std::log(double)" and "std::log(float)".
"IntCell.cc", line 234: Error: Overloading ambiguity between "std::log(double)" and "std::log(float)".

The include file <locale.h> needs to be included to access the LC_ symbols

This file needs to be included from SystemVariable.cc

munmap() does not follow POSIX

By default, Solaris expects the first argument to munmap() to be a char * as opposed to void *. This is non-standard, but standard behaviour can be achieved by setting the #define _XPG4_2

However... Doing this causes some other issues so it might just be best to #ifdef that thing and cast the argument to char * on Solaris.

Regards,
Elias

reply via email to

[Prev in Thread] Current Thread [Next in Thread]