ROSE  0.11.145.0
sage3basic.h
1 /*
2  * This header (or its precompiled version) includes the forward declarations of all the Sage IR node classes ("Sg*")
3  * from the ROSETTA-generated files (i.e., gives just the class names).
4  *
5  * Every source file (.C) that becomes part of librose should include "sage3basic.h" as the first included file before any C++
6  * token is processed by the compiler, thus allowing a precompiled version of this header to be used. This applies to pretty
7  * much every .C file under the $ROSE/src directory. Such source files should not include "rose.h".
8  *
9  * No librose header file (those under $ROSE/src) should include sage3basic.h, rose_config.h, or rose.h. If a header file
10  * needs something that's declared in sage3basic.h then include sage3basic.h in the .C file first (GCC cannot use the
11  * precompiled version if it is included from inside another header). If a header file needs a configuration macro (like
12  * HAVE_WHATEVER) from rose_config.h, then it should include "rosePublicConfig.h" instead (and use ROSE_HAVE_WHATEVER).
13  */
14 
15 #ifndef SAGE3_CLASSES_BASIC__H
16 #define SAGE3_CLASSES_BASIC__H
17 
19 //
20 // This part of this header contains things that *MUST* be done very early due to designs of non-ROSE header files.
21 //
23 
24 // This is first because it quickly brings in all the configuration-related settings that are needed by #ifdef's in the rest of
25 // this header.
26 #include "featureTests.h"
27 
28 // Much of ROSE's binary support uses the intX_t and uintX_t types (where X is a bit width), so we need to have the stdc printf
29 // format macros defined for portability. We do that here because it needs to be done before <inttypes.h> is included for the
30 // first time, and we know that most source files for the ROSE library include this file (sage3basic.h) at or near the
31 // beginning. We don't want to define __STDC_FORMAT_MACROS in user code that includes "rose.h" (the user may define it), and
32 // we need to define it in such a way that we won't get warning's if its already defined. [RMP 2012-01-29]
33 #ifndef __STDC_FORMAT_MACROS
34 #define __STDC_FORMAT_MACROS
35 #endif
36 #include <inttypes.h>
37 
38 // The boost::filesystem::path class has no serialization function, and boost::serialization doesn't provide a non-intrusive
39 // implementation. Therefore ROSE needs to define one. This code must occur before including any headers that serialize
40 // boost::filesystem::path, and specifically before defining AST node types.
41 #ifdef ROSE_HAVE_BOOST_SERIALIZATION_LIB
42 #include <boost/filesystem.hpp>
43 #include <boost/serialization/nvp.hpp>
44 namespace boost {
45  namespace serialization {
46  template<class Archive>
47  void serialize(Archive &ar, boost::filesystem::path &path, const unsigned /*version*/) {
48  if (Archive::is_saving::value) {
49  std::string nativePath = path.string();
50  ar & BOOST_SERIALIZATION_NVP(nativePath);
51  } else {
52  std::string nativePath;
53  ar & BOOST_SERIALIZATION_NVP(nativePath);
54  path = nativePath;
55  }
56  }
57  }
58 }
59 #endif
60 
61 
62 
64 //
65 // This part of the file contains things that must be done early in nearly every ROSE implementation file for nearly every ROSE
66 // configuration. This section should be very small and should not include any headers that are even marginally expensive to
67 // parse.
68 //
70 
71 
72 
73 
75 //
76 // The rest of this file contains optional things that are not needed by every ROSE implementation file (*.C) or by every ROSE
77 // configuration. Do not add more to this -- we're trying to get rid of this section. Instead, move things to other header
78 // files (if necessary) and include them into only those source files that depend on them.
79 //
81 
82 #include "Rose/Constants.h" // defines things like Rose::UNLIMITED, Rose::INVALID_INDEX, etc.
83 
84 // DQ (11/12/2011): This is support to reduce the size of ROSE so that I can manage development on my laptop.
85 // This option defines a subset of ROSE as required to support wotk on the new EDG front-end.
86 // This is defined here becasuse it is not enough to define it in the rose_config.h
87 // because that can't be read early enough to effect what header files are included.
88 // #define ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
89 
90 
91 #include <semaphore.h>
92 #include "fileoffsetbits.h"
93 #include "rosedll.h"
94 //tps (05/04/2010): Added compatibility
95 #ifdef _MSC_VER
96 # if _MSC_VER < 1900
97  #define snprintf _snprintf
98 # endif
99 #endif
100 
101 // George Vulov (Aug. 23, 2010): This macro is not available in OS X by default
102 #ifndef TEMP_FAILURE_RETRY
103 #define TEMP_FAILURE_RETRY(expression) \
104  ({ \
105  long int _result; \
106  do _result = (long int) (expression); \
107  while (_result == -1L && errno == EINTR); \
108  _result; \
109  })
110 #endif
111 
112 // DQ (4/21/2009): Note that this header file will include the STL string header file
113 // which will include sys/stat.h, so the _FILE_OFFSET_BITS macro must be already set
114 // to avoid an ODR violation when using ROSE on 32-bit systems.
115 // DQ (11/10/2007): Added support for ROSE specific paths to be available. These are
116 // useful for tools built using ROSE, they are not presently being used within ROSE.
117 // RPM (8/22/2008): Commented out because it contains info that prevents us from making
118 // optimal use of ccache. "rose_paths.h" contains info that changes every time we
119 // configure. Can it be included at a finer granularity than this?
120 // DQ (8/25/2008): Turn this back on since it breaks ROSE for everyone else. We
121 // are searching for a better solution.
122 #include "rose_paths.h"
123 
124 
125 // DQ (5/30/2004): Added to permit warnings to be placed in the source code so that
126 // issues can be addressed later but called out during development (and eliminated
127 // from the final released version of the source code).
128 #define PRINT_DEVELOPER_WARNINGS 0
129 // #define PRINT_DEVELOPER_WARNINGS 1
130 
131 // Part of debuging use of SUN 6.1 compiler
132 #if defined(__WIN32__) || defined (__WIN16__)
133 #error "WIN macros should not be defined (test in sage3.h)"
134 #endif
135 
136 // Part of debuging use of SUN 6.1 compiler
137 #if defined(__MSDOS__) && defined(_Windows)
138 #error "MSDOS macros should not be defined"
139 #endif
140 
141 // DQ (4/21/2009): Added test to debug use of _FILE_OFFSET_BITS macro in controling size of "struct stat"
142 // #if defined(_FILE_OFFSET_BITS)
143 // #warning "The _FILE_OFFSET_BITS macro should not be set yet!"
144 // #endif
145 
146 // DQ (4/21/2009): This macro is set too late!
147 // Force 64-bit file offsets in struct stat
148 // #define _FILE_OFFSET_BITS 64
149 #include <sys/stat.h>
150 
151 //#include <cstdlib> // For abort()
152 #include <algorithm>
153 #include <fstream>
154 
155 // DQ (8/25/2014): Added logic to isTemplateDeclaration(a_routine_ptr) to force isTemplateDeclaration
156 // in ROSE/EDG connection to be false where the topScopeStack() is a template class instantaition scope.
157 #define ENFORCE_NO_FUNCTION_TEMPLATE_DECLARATIONS_IN_TEMPLATE_CLASS_INSTANTIATIONS 0
158 
159 // DQ (9/24/2004): Try again to remove use of set parent side effect in EDG/Sage III connection! This works!!!
160 #define REMOVE_SET_PARENT_FUNCTION
161 
162 // DQ (6/12/2007): Force checking for valid pointers to IR nodes being overwritten.
163 #define DEBUG_SAGE_ACCESS_FUNCTIONS 0
164 // DQ (6/12/2007): Force assertion test to fail such cases caught when DEBUG_SAGE_ACCESS_FUNCTIONS == 1, else just report error.
165 #define DEBUG_SAGE_ACCESS_FUNCTIONS_ASSERTION 0
166 
167 // DQ (10/12/2004): Remove the resetTemplateName() from use within the EDG/Sage connection
168 // because it will (where required) force calls to generate the qualified name which
169 // requires the parent pointer to have already been set. Since we defer the
170 // setting of the parent pointers until post processing of the Sage III AST.
171 // It is now called within the AstFixup.C.
172 #define USE_RESET_TEMPLATE_NAME false
173 
174 // The ROSE_DEPRECATED marker unconditionally marks a function or variable as deprecated and will produce a warning if
175 // whenever a use of that function or variable occurs. Do not disable this macro; see ROSE_DEPRECATED_FUNCTION instead.
176 // If you mark a function or variable as deprecated, then BE SURE TO FIX PLACES WHERE IT IS USED IN ROSE!!! The WHY argument
177 // should be a string literal (unevaluated) describing why it's deprecated or what to use instead.
178 #if defined(__clang__)
179 # define ROSE_DEPRECATED(WHY) __attribute__((deprecated(WHY)))
180 #elif defined(__GNUC__)
181 # define ROSE_DEPRECATED(WHY) __attribute__((deprecated))
182 #elif defined(_MSC_VER)
183 # define ROSE_DEPRECATED(WHY) /*deprecated*/
184 #else
185 # define ROSE_DEPRECATED(WHY) /*deprecated*/
186 #endif
187 
188 // The ROSE_DEPRECATED_FUNCTION and ROSE_DEPRECATED_VARIABLE conditionally mark a function or variable as deprecated. At this
189 // time, ROSE itself contains hundreds of uses of deprecated functions and variables because the people that marked those
190 // functions and variables as deprecated did not also fix ROSE to avoid calling them. The warnings can be suppressed by
191 // defining ROSE_SUPPRESS_DEPRECATION_WARNINGS on the compiler command-line during configuration.
192 //
193 // For the time being we explicitly define ROSE_SUPPRESS_DEPRECATION_WARNINGS because of the problem mentioned above. ROSE
194 // authors should only add ROSE_DEPRECATED markers and not use new ROSE_DEPRECATED_FUNCTION or ROSE_DEPRECATED_VARAIBLE since
195 // the latter two do nothing. AND BE SURE TO FIX PLACES IN ROSE WHERE THE DEPRECATED THING IS USED!!!!!
196 #undef ROSE_SUPPRESS_DEPRECATION_WARNINGS
197 #define ROSE_SUPPRESS_DEPRECATION_WARNINGS
198 #if !defined(ROSE_SUPPRESS_DEPRECATION_WARNINGS)
199 # if !defined(ROSE_DEPRECATED_FUNCTION)
200 # define ROSE_DEPRECATED_FUNCTION ROSE_DEPRECATED
201 # endif
202 # if !defined(ROSE_DEPRECATED_VARIABLE)
203 # define ROSE_DEPRECATED_VARIABLE ROSE_DEPRECATED
204 # endif
205 #else
206 # if !defined(ROSE_DEPRECATED_FUNCTION)
207 # define ROSE_DEPRECATED_FUNCTION /*deprecated*/
208 # endif
209 # if !defined(ROSE_DEPRECATED_VARIABLE)
210 # define ROSE_DEPRECATED_VARIABLE /*deprecated*/
211 # endif
212 #endif
213 
214 // Used to mark deprecated functions and advertise that fact to developers and especially to end users. This is sometimes
215 // turned off during development (because it's annoying) by defining ROSE_SUPPRESS_DEPRECATION_WARNINGS when configuring.
216 #if !defined(ROSE_SUPPRESS_DEPRECATION_WARNINGS)
217 # if defined(__GNUC__)
218  // Put ROSE_DEPRECATED_FUNCTION after the declaration, i.e.: int Foo::bar() const ROSE_DEPRECATED_FUNCTION;
219 # define ROSE_DEPRECATED_FUNCTION __attribute__((deprecated))
220 # define ROSE_DEPRECATED_VARIABLE __attribute__((deprecated))
221 # elif defined(_MSC_VER)
222  // Microsoft Visual C++ needs "__declspec(deprecated)" before the declaration. We don't really want to put
223  // ROSE_DEPRECATED_FUNCTION both before and after functions, so we just don't worry about advertising deprecation when
224  // using Microsoft compilers. Use MinGW instead if you want a real C++ compiler on Windows.
225 # define ROSE_DEPRECATED_FUNCTION /*deprecated*/
226 # define ROSE_DEPRECATED_VARIABLE /*deprecated*/
227 # else
228  // No portable way to mark C++ functions as deprecated.
229 # define ROSE_DEPRECATED_FUNCTION /*deprecated*/
230 # define ROSE_DEPRECATED_VARIABLE /*deprecated*/
231 # endif
232 #else
233 # define ROSE_DEPRECATED_FUNCTION /*deprecated*/
234 # define ROSE_DEPRECATED_VARIABLE /*deprecated*/
235 #endif
236 
237 // DQ (12/22/2007): Name of implicit Fortran "main" when building the program function.
238 #define ROSE_IMPLICIT_FORTRAN_PROGRAM_NAME "rose_fortran_main"
239 
240 // DQ (10/6/2004): We have tracked down and noted all locations where a Sage III member function modifies its input parameters.
241 // The locations where this happens are marked with a print statement which this macro permits us to turn off when we want to
242 // either make an intermediate release of just not see the warning messages. Many side-effects have been removed and some are
243 // pending more details discussions internally. I would like to goal to be a simple rule that input parameters to constructors
244 // are not modified by the constructor or any function called within the constructor body. A stronger rule would be that the
245 // input parameters to any access function which gets and data member of sets a data member would not modified its input
246 // parameters. Same idea but applied to all access functions, not just constructors. It is not clear if we need go further.
247 // Clearly it might be important to have some function that modify their input parameters but a simple design would disallow it!
248 #define PRINT_SIDE_EFFECT_WARNINGS false
249 
250 
251 // DQ (10/21/2004): We require a relaxed level of internal error checking for manually generated AST fragments!
252 // This is required for get through the current regression tests associated with the loop processing code which
253 // does not follwo the new rules for what qualifies as a valid AST. Time is needed for the AST Interface code
254 // to be adapted to the new rules. Not clear how this will effect the unparser!!!
255 // In the future we want to make this value "TRUE" this is a work around until then.
256 #ifdef _MSC_VER
257 #define STRICT_ERROR_CHECKING 0
258 #else
259 #define STRICT_ERROR_CHECKING false
260 #endif
261 
262 // DQ (11/7/2007): Reimplementation of "fixup" support for the AST copy mechanism.
263 // This version separates the fixup into three phases:
264 // Use three files to organize the separate functions (parent/scope setup, symbol table setup, and symbol references).
265 // Order of operations:
266 // 1) Setup scopes on all declaration (e.g. SgInitializedName objects).
267 // 2) Setup the symbol table.
268 // template instantiations must be added to to the symbol tables as defined by their scope
269 // because they may be located outside of their scope (indicated by their template declaration).
270 // We might need a test and set policy.
271 // Use the help map to support error checking in the symbol table construction. Check that
272 // scopes are not in the original AST (not keys in the help map).
273 // 3) Setup the references (SgVarRefExp objects pointers to SgVariableSymbol objects)
274 #define ALT_FIXUP_COPY 1
275 
276 
277 // AJ (10/21/2004) : the current version of g++ 3.2.3 has the "hash_map" deprecated - this
278 // deprecated hash_map is // in the global namespace and generates a warning every time
279 // the file gets included. The "ext/hash_map" is the newer version of the hash_map but
280 // it is no longer in the global namespace or std ( since the hash_map is not part of
281 // the standard STL) but in the compiler specific namespace (__gnu_cxx). Because of this,
282 // we have opted for using the newer version and explicitly using the namespace __gnu_cxx
283 // See below the using namespace section. If there is a need to change this to a more
284 // standard include "hash_map", please make sure you have selected the right namespace for
285 // using the hash_map and modify the section below
286 // for that.
287 // Liao, 7/10/2009
288 //#if __GNUC__ > 4 ||
289 // (__GNUC__ == 4 && (__GNUC_MINOR__ > 3 ||
290 // (__GNUC_MINOR__ == 3 &&
291 // __GNUC_PATCHLEVEL__ >= 0)))
292 //#include <unordered_map>
293 //#else
294 
295 
296 
297 //#endif
298 #if 1
299 #ifdef _MSC_VER
300 // DQ (11/4/2009): MS Visual Studio version of hash_multimap
301 //#include <cliext/hash_map>
302 #else
303 // DQ (11/4/2009): Use the GNU depricated stuff (what works in ROSE at the moment)
304 // tps (01/25/2010) : deprecated - does not work in setup.h
305 // CH (04/28/2010) : We don't need it anymore
306 //#include <ext/hash_map>
307 #endif
308 #endif
309 
310 // tps (01/22/2010) :refactored
311 #include "rosedefs.h"
312 // Support for preprocessors declarations and comments
313 #include "rose_attributes_list.h"
314 
315 // Include ROSE common utility function library
316 #include <Rose/StringUtility.h>
317 #include "FileUtility.h"
318 #include "escape.h"
319 
320 // Include support for Brian Gunney's command line parser tool (nice work)
321 #include "sla.h"
322 
323 
324 // DQ (3/29/2006): I sure would like to remove this since it
325 // has a potential to effect other files from other projects
326 // used with ROSE.
327 // #define INLINE
328 
329 // DQ (9/21/2005): Support for memory pools.
330 // This allows for a total number of IR nodes (for each type of IR node) of
331 // (MAX_NUMBER_OF_MEMORY_BLOCKS * DEFAULT_CLASS_ALLOCATION_POOL_SIZE)
332 // It might be better to use an STL vector here since they we don't have
333 // an upper bound on the number of IR nodes of each type!!!
334 // #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 1000
335 
336 // Typical values used to testing the AST File I/O are 1 or 2, but larger values
337 // are required for better performance. At some point the value should be evaluated
338 // as even a value of 1000 is likely a bit small for larger whole applications.
339 // #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 1000
340 // #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 1
341 // #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 2
342 // #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 3
343 // #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 1000
344 
345 // DQ (11/3/2016): This size causes the AST File I/O to fail. It is likely that
346 // since the INITIAL_SIZE_OF_MEMORY_BLOCKS is set to 10000, the DEFAULT_CLASS_ALLOCATION_POOL_SIZE
347 // should apparently be significantly less that the INITIAL_SIZE_OF_MEMORY_BLOCKS.
348 // It is not clear what the rule should be for this.
349 // When it fails the error is:
350 // static const string& Sg_File_Info::getFilenameFromID(int): Assertion `failure == false' failed.
351 // #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 10000 (fails)
352 // #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 2000 (passes)
353 #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 2000
354 // #define DEFAULT_CLASS_ALLOCATION_POOL_SIZE 4000 (fails)
355 
356 // DQ (3/7/2010):Added error checking.
357 #if DEFAULT_CLASS_ALLOCATION_POOL_SIZE < 1
358  #error "DEFAULT_CLASS_ALLOCATION_POOL_SIZE must be greater than zero!"
359 #endif
360 
361 // DQ (3/7/2010): This is no longer used (for several years) and we use an STL based implementation.
362 // #define MAX_NUMBER_OF_MEMORY_BLOCKS 1000
363 
364 
365 // DQ (9/231/2005): Map these to the C library memory alloction/deallocation functions.
366 // These could use alternative allocators which allocate on page boundaries in the future.
367 // This is part of the support for memory pools for the Sage III IR nodes.
368 // #define ROSE_MALLOC malloc
369 // #define ROSE_FREE free
370 // DQ (9/9/2008): Don't let this be confused by a member function called "free" in Robb's work.
371 #define ROSE_MALLOC ::malloc
372 #define ROSE_FREE ::free
373 
374 // DQ (10/6/2006): Allow us to skip the support for caching so that we can measure the effects.
375 #define SKIP_BLOCK_NUMBER_CACHING 0
376 #define SKIP_MANGLED_NAME_CACHING 0
377 
378 #define USE_OLD_BINARY_EXECUTABLE_IR_NODES 0
379 
380 #define USING_OLD_EXECUTABLE_FORMAT_SUPPORT 0
381 #if USING_OLD_EXECUTABLE_FORMAT_SUPPORT
382 // DQ (12/8/2008): Build a forward declaration for the input parameter type for the
383 // SgAsmFileHeader class constructor.
384 namespace Exec { namespace ELF { class ElfFileHeader; }; };
385 #endif
386 
387 
388 // DQ (12/28/2009): Moved from Cxx_Grammar.h to simplify splitting large files generated by ROSETTA.
389 #include "AstAttributeMechanism.h"
390 
391 // DQ (12/29/2009): This permits the optional use of smaller generated header files for the IR.
392 // Without this option the generated header file for the ROSE IR is nearly 300K in size, and
393 // this can be a problem for some compilers (MSVC). This is part of work to optionally reduce
394 // the sizes of some of the larger ROSETTA generated files in ROSE. Later this will be controled
395 // using a configure command line option to ROSE (at configure time).
396 // #define ROSE_USING_SMALL_GENERATED_HEADER_FILES 1
397 
398 // This is an Autoconf conditional macro (so it should not be defined).
399 #ifdef ROSE_USE_SMALLER_GENERATED_FILES
400 // #warning "ROSE_USE_SMALLER_GENERATED_FILES is defined"
401  #define ROSE_USING_SMALL_GENERATED_HEADER_FILES 1
402 #endif
403 
404 // Rasmussen (05/17/2023): Removed ATerm includes files here. ATerm usage has been deleted
405 // for general use (except for Jovial parser), so including ATerm headers no longer
406 // necessary nor a good idea.
407 
408 namespace Rose { namespace Traits { namespace generated { template <typename NodeT> struct describe_node_t; } } }
409 namespace Rose { namespace Traits { namespace generated { template <typename NodeT, typename FieldT, FieldT NodeT::* fld_ptr> struct describe_field_t; } } }
410 
411 // DQ (3/7/2013): I think that we need to use "" instead of <> and this may make a difference for SWIG.
412 // DQ (9/21/2005): This is the simplest way to include this here
413 // This is the definition of the Sage III IR classes (generated header).
414 // #include <Cxx_Grammar.h>
415 #include "Cxx_Grammar.h"
416 
417 // DQ (10/4/2014): Not clear if this is the best way to control use of ATerm.
418 // I think we need a specific macro to be defined for when ATerms are being used.
419 // Also I want to initially seperate this from Windows support.
420 // Rasmussen (04/17/2019): Support for ATerms has been deprecated.
421 #ifndef _MSC_VER
422 // #include "atermSupport.h"
423 #endif
424 
425 // Disable CC++ extensions (we want to support only the C++ Standard)
426 #undef CCPP_EXTENSIONS_ALLOWED
427 
428 // This should be a simple include (without dependence upon ROSE_META_PROGRAM
429 #include "utility_functions.h"
430 
431 // DQ (3/6/2013): Adding support to restrict visability to SWIG.
432 // #ifndef ROSE_USE_SWIG_SUPPORT
433 
434 // Markus Schordan: temporary fixes for Ast flaws (modified by DQ)
435 #include <typeinfo>
436 
437 // DQ (12/9/2004): The name of this file has been changed to be the new location
438 // of many future Sage III AST manipulation functions in the future. A namespace
439 // (SageInterface) is defined in sageInterface.h.
440 #include "sageInterface.h"
441 
442 
443 // DQ (3/29/2006): Moved Rich's support for better name mangling to a
444 // separate file (out of the code generation via ROSETTA).
445 #include "manglingSupport.h"
446 
447 // Markus Kowarschik: we use the new mechanism of handling preprocessing info;
448 // i.e., we output the preprocessing info attached to the AST nodes.
449 // See the detailed explanation of the mechanisms in the beginning of file
450 // attachPreprocessingInfo.C
451 #define USE_OLD_MECHANISM_OF_HANDLING_PREPROCESSING_INFO 0
452 
453 // DQ (9/1/2006): It is currently an error to normalize the source file names stored
454 // in the SgProject IR node to be absolute paths if they didn't originally appear
455 // that way on the commandline. We have partial support for this but it is a bug
456 // at the moment to use this. However, we do now (work by Andreas) normalize the
457 // source file name when input to EDG so that all Sg_File_Info objects store an
458 // absolute path (unless modified using a #line directive, see test2004_60.C as an
459 // example). The current work is an incremental solution.
460 #define USE_ABSOLUTE_PATHS_IN_SOURCE_FILE_LIST 0
461 
462 // DQ (7/6/2005): Added to support performance analysis of ROSE.
463 // This is located in ROSE/src/midend/astDiagnostics
464 #include "AstPerformance.h"
465 
466 
467 // DQ (4/10/2010): Moved Dwarf and Intel Pin headers to here from rose.h.
468 // DQ (11/7/2008): Added Dwarf support to ROSE AST (applies only to binary executables generated with dwarf debugging information).
469 #ifndef _MSC_VER
470 // DQ (3/8/2009): Added support for Intel Pin (Dynamic binary Instrumentation)
471 // tps (11/23/2009) : Commented out right now to make progress in Windows
472  #ifdef USE_ROSE_INTEL_PIN_SUPPORT
473 // Note that pin.H (in it's header files) will define "TRUE" and "FALSE" as macros.
474  #include "IntelPinSupport.h"
475  #endif
476 #endif
477 
478 #ifdef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT
479  #include "transformationSupport.h"
480 #endif
481 
482 // DQ (10/26/2016): Adding mechanism to suppress use of delete in SgType IR nodes, so
483 // that the memory pool will not be changing while we are traversing it. I think this
484 // is perhaps a fundamental problem in the memory pool traversal if operations are done
485 // that modify the memory pools during the traversal.
486 #define ALLOW_DELETE_OF_EXPLORATORY_NODE 1
487 
488 // endif for ifndef ROSE_USE_SWIG_SUPPORT
489 // #endif
490 
491 #include <Rose/Initialize.h>
492 
493 // Liao, 2018/6/25, define the actual version value for OpenMP 4.5
494 #define OMPVERSION 201511
495 
496 #endif
497 
498 
void serialize(std::ostream &output, Graph &graph)
Serialize a graph into a stream of bytes.
Definition: GraphUtility.h:17
Main namespace for the ROSE library.