Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Side by Side Diff: include/clang/Basic/TargetCXXABI.h

Issue 1696583002: Remove Emscripten support (Closed) Base URL: https://chromium.googlesource.com/a/native_client/pnacl-clang.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | lib/AST/ASTContext.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===--- TargetCXXABI.h - C++ ABI Target Configuration ----------*- C++ -*-===// 1 //===--- TargetCXXABI.h - C++ ABI Target Configuration ----------*- C++ -*-===//
2 // 2 //
3 // The LLVM Compiler Infrastructure 3 // The LLVM Compiler Infrastructure
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 /// 9 ///
10 /// \file 10 /// \file
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 iOS64, 72 iOS64,
73 73
74 /// The generic AArch64 ABI is also a modified version of the Itanium ABI, 74 /// The generic AArch64 ABI is also a modified version of the Itanium ABI,
75 /// but it has fewer divergences than the 32-bit ARM ABI. 75 /// but it has fewer divergences than the 32-bit ARM ABI.
76 /// 76 ///
77 /// The relevant changes from the generic ABI in this case are: 77 /// The relevant changes from the generic ABI in this case are:
78 /// - representation of member function pointers adjusted as in ARM. 78 /// - representation of member function pointers adjusted as in ARM.
79 /// - guard variables are smaller. 79 /// - guard variables are smaller.
80 GenericAArch64, 80 GenericAArch64,
81 81
82 // @LOCALMOD-START Emscripten
83 /// Emscripten uses the Itanium C++, with the exception that it uses
84 /// ARM-style pointers to member functions.
85 Emscripten,
86 // @LOCALMOD-END Emscripten
87 /// The generic Mips ABI is a modified version of the Itanium ABI. 82 /// The generic Mips ABI is a modified version of the Itanium ABI.
88 /// 83 ///
89 /// At the moment, only change from the generic ABI in this case is: 84 /// At the moment, only change from the generic ABI in this case is:
90 /// - representation of member function pointers adjusted as in ARM. 85 /// - representation of member function pointers adjusted as in ARM.
91 GenericMIPS, 86 GenericMIPS,
92 87
93 /// The Microsoft ABI is the ABI used by Microsoft Visual Studio (and 88 /// The Microsoft ABI is the ABI used by Microsoft Visual Studio (and
94 /// compatible compilers). 89 /// compatible compilers).
95 /// 90 ///
96 /// FIXME: should this be split into Win32 and Win64 variants? 91 /// FIXME: should this be split into Win32 and Win64 variants?
(...skipping 19 matching lines...) Expand all
116 } 111 }
117 112
118 Kind getKind() const { return TheKind; } 113 Kind getKind() const { return TheKind; }
119 114
120 /// \brief Does this ABI generally fall into the Itanium family of ABIs? 115 /// \brief Does this ABI generally fall into the Itanium family of ABIs?
121 bool isItaniumFamily() const { 116 bool isItaniumFamily() const {
122 switch (getKind()) { 117 switch (getKind()) {
123 case GenericAArch64: 118 case GenericAArch64:
124 case GenericItanium: 119 case GenericItanium:
125 case GenericARM: 120 case GenericARM:
126 case Emscripten: // @LOCALMOD Emscripten
127 case iOS: 121 case iOS:
128 case iOS64: 122 case iOS64:
129 case GenericMIPS: 123 case GenericMIPS:
130 return true; 124 return true;
131 125
132 case Microsoft: 126 case Microsoft:
133 return false; 127 return false;
134 } 128 }
135 llvm_unreachable("bad ABI kind"); 129 llvm_unreachable("bad ABI kind");
136 } 130 }
137 131
138 /// \brief Is this ABI an MSVC-compatible ABI? 132 /// \brief Is this ABI an MSVC-compatible ABI?
139 bool isMicrosoft() const { 133 bool isMicrosoft() const {
140 switch (getKind()) { 134 switch (getKind()) {
141 case GenericAArch64: 135 case GenericAArch64:
142 case GenericItanium: 136 case GenericItanium:
143 case GenericARM: 137 case GenericARM:
144 case Emscripten: // @LOCALMOD Emscripten
145 case iOS: 138 case iOS:
146 case iOS64: 139 case iOS64:
147 case GenericMIPS: 140 case GenericMIPS:
148 return false; 141 return false;
149 142
150 case Microsoft: 143 case Microsoft:
151 return true; 144 return true;
152 } 145 }
153 llvm_unreachable("bad ABI kind"); 146 llvm_unreachable("bad ABI kind");
154 } 147 }
155 148
156 // @LOCALMOD-START Emscripten
157 /// \brief Are pointers to member functions differently aligned?
158 bool arePointersToMemberFunctionsAligned() const {
159 switch (getKind()) {
160 case Emscripten:
161 // Emscripten uses table indices for function pointers and therefore
162 // doesn't require alignment.
163 return false;
164 case GenericARM:
165 case GenericAArch64:
166 // TODO: ARM-style pointers to member functions put the discriminator in
167 // the this adjustment, so they don't require functions to have any
168 // special alignment and could therefore also return false.
169 case GenericItanium:
170 case GenericMIPS:
171 case iOS:
172 case iOS64:
173 case Microsoft:
174 return true;
175 }
176 llvm_unreachable("bad ABI kind");
177 }
178 // @LOCALMOD-END Emscripten
179
180 /// \brief Is the default C++ member function calling convention 149 /// \brief Is the default C++ member function calling convention
181 /// the same as the default calling convention? 150 /// the same as the default calling convention?
182 bool isMemberFunctionCCDefault() const { 151 bool isMemberFunctionCCDefault() const {
183 // Right now, this is always false for Microsoft. 152 // Right now, this is always false for Microsoft.
184 return !isMicrosoft(); 153 return !isMicrosoft();
185 } 154 }
186 155
187 /// Are arguments to a call destroyed left to right in the callee? 156 /// Are arguments to a call destroyed left to right in the callee?
188 /// This is a fundamental language change, since it implies that objects 157 /// This is a fundamental language change, since it implies that objects
189 /// passed by value do *not* live to the end of the full expression. 158 /// passed by value do *not* live to the end of the full expression.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 /// exploiting this observation requires an ABI break and cannot be 211 /// exploiting this observation requires an ABI break and cannot be
243 /// done on a generic Itanium platform. 212 /// done on a generic Itanium platform.
244 bool canKeyFunctionBeInline() const { 213 bool canKeyFunctionBeInline() const {
245 switch (getKind()) { 214 switch (getKind()) {
246 case GenericARM: 215 case GenericARM:
247 case iOS64: 216 case iOS64:
248 return false; 217 return false;
249 218
250 case GenericAArch64: 219 case GenericAArch64:
251 case GenericItanium: 220 case GenericItanium:
252 case Emscripten: // @LOCALMOD Emscripten
253 case iOS: // old iOS compilers did not follow this rule 221 case iOS: // old iOS compilers did not follow this rule
254 case Microsoft: 222 case Microsoft:
255 case GenericMIPS: 223 case GenericMIPS:
256 return true; 224 return true;
257 } 225 }
258 llvm_unreachable("bad ABI kind"); 226 llvm_unreachable("bad ABI kind");
259 } 227 }
260 228
261 /// When is record layout allowed to allocate objects in the tail 229 /// When is record layout allowed to allocate objects in the tail
262 /// padding of a base class? 230 /// padding of a base class?
(...skipping 27 matching lines...) Expand all
290 UseTailPaddingUnlessPOD11 258 UseTailPaddingUnlessPOD11
291 }; 259 };
292 TailPaddingUseRules getTailPaddingUseRules() const { 260 TailPaddingUseRules getTailPaddingUseRules() const {
293 switch (getKind()) { 261 switch (getKind()) {
294 // To preserve binary compatibility, the generic Itanium ABI has 262 // To preserve binary compatibility, the generic Itanium ABI has
295 // permanently locked the definition of POD to the rules of C++ TR1, 263 // permanently locked the definition of POD to the rules of C++ TR1,
296 // and that trickles down to all the derived ABIs. 264 // and that trickles down to all the derived ABIs.
297 case GenericItanium: 265 case GenericItanium:
298 case GenericAArch64: 266 case GenericAArch64:
299 case GenericARM: 267 case GenericARM:
300 case Emscripten: // @LOCALMOD Emscripten
301 case iOS: 268 case iOS:
302 case GenericMIPS: 269 case GenericMIPS:
303 return UseTailPaddingUnlessPOD03; 270 return UseTailPaddingUnlessPOD03;
304 271
305 // iOS on ARM64 uses the C++11 POD rules. It does not honor the 272 // iOS on ARM64 uses the C++11 POD rules. It does not honor the
306 // Itanium exception about classes with over-large bitfields. 273 // Itanium exception about classes with over-large bitfields.
307 case iOS64: 274 case iOS64:
308 return UseTailPaddingUnlessPOD11; 275 return UseTailPaddingUnlessPOD11;
309 276
310 // MSVC always allocates fields in the tail-padding of a base class 277 // MSVC always allocates fields in the tail-padding of a base class
(...skipping 12 matching lines...) Expand all
323 } 290 }
324 291
325 friend bool operator!=(const TargetCXXABI &left, const TargetCXXABI &right) { 292 friend bool operator!=(const TargetCXXABI &left, const TargetCXXABI &right) {
326 return !(left == right); 293 return !(left == right);
327 } 294 }
328 }; 295 };
329 296
330 } // end namespace clang 297 } // end namespace clang
331 298
332 #endif 299 #endif
OLDNEW
« no previous file with comments | « no previous file | lib/AST/ASTContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698