CXX-RELEASE NOTES

Order Number: XX-B1233-BE

This document, the OpenVMS x86-64 VSI C++ Release Notes (01-Mar-2023), describes a field-test VSI C++ x86-64 compiler for OpenVMS x86.

Key Features and Architecture:

  • Based on LLVM Clang: The compiler leverages the LLVM Clang compiler with added OpenVMS-specific features.
  • Compiler Tools: The package includes two compilers:

    • CLANG: Supports UNIX-style command-line options.
    • CXX: Supports DCL command-line options, silently ignoring unsupported qualifiers.
  • Demangling Tool: CXX$DEMANGLE (based on llvm-cxxfilt) for UNIX-style C++ name demangling.

  • OpenVMS Integration:

    • Supports OpenVMS-specific pragmas (e.g., pointer_size, member_alignment, extern_model) and predefined symbols (VMS, _x86_64).
    • Uses headers extracted from SYS$STARLET.TLB, adapted DECC$RTLDEF.TLB, and Clang's own C++ headers; TLB format support is planned.
    • Provides LIBCXX and LIBCXXABI runtime libraries (static and shared).
    • The OpenVMS x86 linker defaults to 64-bit address space.
  • Compilation vs. Linking: Unlike traditional UNIX compilers, this compiler only compiles; linking is a separate step.

Key Differences from OpenVMS Itanium/Alpha C++:

  • Data Types and Pointers: long, size_t, nullptr_t, ptrdiff_t, and default pointers are 64-bits wide on OpenVMS x86 (vs. 32-bits on Itanium). The default pointer size is 64-bit but can be changed via -pointer-size (Clang) or /POINTER_SIZE (CXX).
  • External Names: The compiler does not automatically upcase external names; the default is as_is (configurable via -names or /NAMES).

Command Line Usage Notes:

  • Clang: Sensitive to input file extensions (e.g., .c for C, .cpp for C++); -x c++ can force C++ mode. Options are case-sensitive.
  • DCL Arguments: DCL upcases arguments, and CRTL may downcase them. To prevent this, use double-quotes for options or define specific process settings (SET PROCESS /PARSE=EXTENDED, DEFINE/NOLOG DECC$ARGV_PARSE_STYLE ENABLE, etc.).
  • DCL Qualifiers: A table lists supported and ignored DCL qualifiers. Many DCL qualifiers have corresponding Clang command-line options (e.g., /DEFINE maps to -D, /OPTIMIZE maps to -O<level>).

Known Issues (as of March 2023):

  • No support for TLB files or the /LIBRARY qualifier.
  • long double data type is not yet fully supported.
  • No listing file generation (though ANALYZE/OBJECT/DISASSEMBLE can provide similar info).
  • Existing problems with 32-bit pointers leading to LLVM back-end fatal errors.
  • TRY/CATCH statements may not work correctly on V9.2 systems.
  • The lib$establish() function is not implemented in Clang.
  • Using std::cout.operator<< within global object constructors causes %SYSTEM-F-ACCVIO when linked with static cxx_static.olb and cxxabi_static.olb.
  • Does not support global new/delete operator overrides due to lack of symbol preemption in VMS.
  • The CXX compiler cannot compile multiple source files in a single command.

The document also provides details on specific pragma options, header handling, and various command-line options and their mappings between CXX DCL qualifiers and Clang options. For further details on Clang, external documentation is referenced.

XX-B1233-BE
May 2000
11 pages
Quality

Original
0.1MB

Site structure and layout ©2025 Majenko Technologies