annotate gcc/config/sol2-cxx.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* C++ specific Solaris system support.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2 Copyright (C) 2011-2018 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 This file is part of GCC.
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 GCC is free software; you can redistribute it and/or modify
kono
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
8 the Free Software Foundation; either version 3, or (at your option)
kono
parents:
diff changeset
9 any later version.
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 GCC is distributed in the hope that it will be useful,
kono
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kono
parents:
diff changeset
14 GNU General Public License for more details.
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
17 along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
18 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 #include "config.h"
kono
parents:
diff changeset
21 #include "system.h"
kono
parents:
diff changeset
22 #include "coretypes.h"
kono
parents:
diff changeset
23 #include "cp/cp-tree.h"
kono
parents:
diff changeset
24 #include "stringpool.h"
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 /* Before GCC 4.7, g++ defined __cplusplus 1 to avoid coping with the C++98
kono
parents:
diff changeset
27 overloads in Solaris system headers. Since this was fixed, 4 structure
kono
parents:
diff changeset
28 types would move to namespace std, breaking the Solaris libstdc++ ABI.
kono
parents:
diff changeset
29 To avoid this, we forcefully keep those types in the global namespace.
kono
parents:
diff changeset
30 This can be removed once the next major version of libstdc++ is
kono
parents:
diff changeset
31 released. */
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 /* Cache the identifiers of the affected types to speed up lookup. */
kono
parents:
diff changeset
34 #define NUM_FGID 4
kono
parents:
diff changeset
35 static GTY(()) tree force_global_identifiers[NUM_FGID];
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 /* Check if DECL is one of the affected types and move it to the global
kono
parents:
diff changeset
38 namespace if so. */
kono
parents:
diff changeset
39 tree
kono
parents:
diff changeset
40 solaris_cxx_decl_mangling_context (const_tree decl)
kono
parents:
diff changeset
41 {
kono
parents:
diff changeset
42 static bool init = false;
kono
parents:
diff changeset
43 int i = 0;
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 if (!init)
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 force_global_identifiers[i++] = get_identifier ("div_t");
kono
parents:
diff changeset
48 force_global_identifiers[i++] = get_identifier ("ldiv_t");
kono
parents:
diff changeset
49 force_global_identifiers[i++] = get_identifier ("lconv");
kono
parents:
diff changeset
50 force_global_identifiers[i++] = get_identifier ("tm");
kono
parents:
diff changeset
51 init = true;
kono
parents:
diff changeset
52 }
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 if (!(DECL_P (decl) && DECL_NAMESPACE_STD_P (CP_DECL_CONTEXT (decl))))
kono
parents:
diff changeset
55 return NULL_TREE;
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 for (i = 0; i < NUM_FGID; i++)
kono
parents:
diff changeset
58 if (DECL_NAME (decl) == force_global_identifiers[i])
kono
parents:
diff changeset
59 return global_namespace;
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 return NULL_TREE;
kono
parents:
diff changeset
62 }