- Community Home
- >
- Servers and Operating Systems
- >
- Operating Systems
- >
- Operating System - OpenVMS
- >
- Re: Volatile access appears unaligned on local var...
Categories
Company
Local Language
Forums
Discussions
Forums
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
Discussions
Discussions
Discussions
Forums
Discussions
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Community
Resources
Forums
Blogs
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2015 06:46 AM
07-21-2015 06:46 AM
Volatile access appears unaligned on local variable - Pascal
I have a local definded varying of char and when I try to give it a value I get a compiler warning.
The compiler warning is:
%PASCAL-I-PROCESSFILE, Compiling file SYS$SYSDEVICE:[DM9415.WORK.SOURCE.SUPPORT]
STE.PAS;28
String := SteLowbayAisleMemRec [ LowbayAisleRecNo ].AisleBarcode;
....^
%PASCAL-W-UNAVOLACC, Volatile access appears unaligned, but must be aligned at r
un-time to ensure atomicity and byte granularity
at line number 37 in file SYS$SYSDEVICE:[DM9415.WORK.SOURCE.SUPPORT]STE.PAS;28
%PASCAL-W-ENDDIAGS, PASCAL completed with 1 diagnostic
String is defined as VARYING [BARCODE_MAX_LEN] OF CHAR
I have tried adding [ALIGNED(4)] or 2 but it still gives me the warning.
Does anyone have an idea of the possible fix for this?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2015 07:27 AM
07-21-2015 07:27 AM
Re: Volatile access appears unaligned on local variable - Pascal
I know nothing, but I'd expect a Pascal problem report to begin with:
pascal /version
An actual, complete test case might be helpful, too.
> I have tried adding [ALIGNED(4)] or 2 [...]
While interesting, a vague description of what you did tends to be
less useful than another complete test case with the change.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2015 09:01 AM
07-21-2015 09:01 AM
Re: Volatile access appears unaligned on local variable - Pascal
The pascal version is 6.1 and on Integrity 8.4
As it is not a large program I have attached it.
I had to attach it as a txt file as the attach option does not allow pas files
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-21-2015 10:54 AM
07-21-2015 10:54 AM
Re: Volatile access appears unaligned on local variable - Pascal
> I had to attach it as a txt file [...]
Not the biggest problem...
alp $ pas shaw.pas
'ENV:LB_DECLARATIONS' )]
...........^
%PASCAL-F-DEV, error in device name or inappropriate device type for operation
at line number 4 in file ALP$DKC0:[SMS.itrc]shaw.pas;1
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-22-2015 01:47 PM
07-22-2015 01:47 PM
Re: Volatile access appears unaligned on local variable - Pascal
Why do you want to have a volatile local? Are you passing its address?
Also, volatile on large arrays is pretty meaningless, you need a locking mechanism.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-23-2015 08:24 PM
07-23-2015 08:24 PM
Re: Volatile access appears unaligned on local variable - Pascal
+1 for Dennis
Placing volatile on an array doesn't mean much. You are saying "please make sure that any assignment to the array is done in an atomic fashion". There isn't any Alpha or Itanium instruction sequence that can do that. You would need some higher level locking mechanism.
Unfortunately, Pascal doesn't have any sort of "weak volatile" attribute that says "I've taken the address of this buffer and its contents might change when any routine might be called". The language (C isn't any better) says to put volatile on it. That then gets you the warnings you described.
Personally, you can remove the volatile from the array. The compiler isn't going to cache the array contents into some register (or sequence of registers).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-24-2015 02:58 AM
07-24-2015 02:58 AM
Re: Volatile access appears unaligned on local variable - Pascal
Sorry for the delay in replying but I have been travelling with work.
The reason why it has ENV:LB_DECLARATIONS at the top is because a lot of the things defined are in there. It is part of our build system.
The resons for volatile is because originally the issue was in a much larger set of library files and I have moved the array into the local file, changed the name and reduced the size so that it could be used as an example for this post.
I was going to do a new version but without needing ENV:LB_DECLARATIONS so that you could all be able to compile it but in doing so I wanted to remove some of the fields from some of the records defined in there. This ended up leading me to the solution for the issue.
The issue is related to the enum in the type defined.
I found that for some of the types defined [ALIGNED(4)] the enum would get rid of the warning and for some of the others changing the ordering of the fields based on type got rid of it.
This does not always work if the code is within a WITH block.
if you have an array and an element is referenced using a WITH and another element which isn't and you try to copy from the one element that isn't into the one that is then it can also get the same issue.
Example (not perfect syntax)
WITH ArrayBob[ i ]
str := ArrayBob[j].str;
This one caused a warning where as this one doesn't:
WITH ArrayBob[ i ]
ArrayBob[ i ].str := ArrayBob[j].str;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-24-2015 08:22 AM
07-24-2015 08:22 AM
Re: Volatile access appears unaligned on local variable - Pascal
The message comes from the code generator when it sees a volatile tag and an operation that it simply cannot do atomically. Sometimes it is alignment related (ie, an unaligned integer) but in other cases (like strings and arrays), it can never do a large memory operation in an atomic fashion.
The lack of the message in your example above is that the string to string move probably turned into a call to OTS$MOVEM directely early in the GEM optimizer such that by the time the code generator say the assignment, it wasn't an assignment anymore, but just a routine call.
Looking back at all the confusion about putting on arrays and records, the frontend should probably have issued its own set of infos/warnings.
There may be a switch that can suppress that message from GEM, but I can't access the sources at the moment to look it up.
As I mentioned above, just remove the VOLATILE on the array, it really doesn't do anything for array operations. You sometimes need the VOLATILE if you access that array from an exception handler used with the ESTABLISH builtin.
We can have the discussion as to whether a 'volatile array of integers' is the same as an 'array of volatile integers' and if a higher level VOLATILE propagates downward. For example, if you put VOLATILE on a RECORD, do you want all the field operations to be volatile? It is rather tricky. There could be a compiler bug somewhere in this area.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-24-2015 03:04 PM
07-24-2015 03:04 PM
Re: Volatile access appears unaligned on local variable - Pascal
>The language (C isn't any better) says to put volatile on it.
The HP-UX C/aC++ compiler has 16 types of volatile, just for that purpose. :-)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-11-2015 05:46 AM
08-11-2015 05:46 AM
Re: Volatile access appears unaligned on local variable - Pascal
@John Reagan wrote:
(C isn't any better)
Correct. Probably somewhat worse, the volatile keyword is of somewhat limited use as far back as C99; it doesn't quite do all of what (many) folks want when they use that keyword. In C, volatile is intended for accessing device registers, and not particularly for concurrent access to shared data. C11 can do better here, with the _Atomic and _Alignas and the threading features that are (optionally) available.
Hello "Your post has been changed because invalid HTML was found in the message body. The invalid HTML has been removed. Please review the message and submit the message when you are satisfied." Glad to see you again.