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