blob: 16f1ae6d3fb296e74a9a924b2c289d0aabd27790 [file] [log] [blame]
Douglas Gregor6ec36682009-02-18 23:53:56 +00001//===--- Mangle.h - Mangle C++ Names ----------------------------*- C++ -*-===//
Douglas Gregor5f2bfd42009-02-13 00:10:09 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Implements C++ name mangling according to the Itanium C++ ABI,
11// which is used in GCC 3.2 and newer (and many compilers that are
12// ABI-compatible with GCC):
13//
14// http://www.codesourcery.com/public/cxx-abi/abi.html
15//
16//===----------------------------------------------------------------------===//
Chris Lattnerca3f25c2009-03-21 08:24:40 +000017
Douglas Gregor5f2bfd42009-02-13 00:10:09 +000018#ifndef LLVM_CLANG_CODEGEN_MANGLE_H
19#define LLVM_CLANG_CODEGEN_MANGLE_H
20
Anders Carlsson3ac86b52009-04-15 05:36:58 +000021#include "CGCXX.h"
Mike Stumpf1216772009-07-31 18:25:34 +000022#include "clang/AST/Type.h"
Anders Carlsson3ac86b52009-04-15 05:36:58 +000023
Douglas Gregor5f2bfd42009-02-13 00:10:09 +000024namespace llvm {
25 class raw_ostream;
26}
27
28namespace clang {
29 class ASTContext;
Anders Carlsson3ac86b52009-04-15 05:36:58 +000030 class CXXConstructorDecl;
Anders Carlsson27ae5362009-04-17 01:58:57 +000031 class CXXDestructorDecl;
Mike Stumpdec025b2009-09-07 04:27:52 +000032 class FunctionDecl;
Douglas Gregor5f2bfd42009-02-13 00:10:09 +000033 class NamedDecl;
Anders Carlsson41aa8c12009-04-13 18:02:10 +000034 class VarDecl;
Mike Stump1eb44332009-09-09 15:08:12 +000035
36 bool mangleName(const NamedDecl *D, ASTContext &Context,
Douglas Gregor5f2bfd42009-02-13 00:10:09 +000037 llvm::raw_ostream &os);
Mike Stumpdec025b2009-09-07 04:27:52 +000038 void mangleThunk(const FunctionDecl *FD, int64_t n, int64_t vn,
Mike Stump883f1272009-09-02 00:28:47 +000039 ASTContext &Context, llvm::raw_ostream &os);
Mike Stump9124bcc2009-09-02 00:56:18 +000040 void mangleCovariantThunk(const NamedDecl *D, bool VirtualThis, int64_t nv_t,
41 int64_t v_t, bool VirtualResult, int64_t nv_r,
42 int64_t v_r, ASTContext &Context,
43 llvm::raw_ostream &os);
Anders Carlsson41aa8c12009-04-13 18:02:10 +000044 void mangleGuardVariable(const VarDecl *D, ASTContext &Context,
45 llvm::raw_ostream &os);
Mike Stumpf1216772009-07-31 18:25:34 +000046 void mangleCXXVtable(QualType T, ASTContext &Context, llvm::raw_ostream &os);
Mike Stump738f8c22009-07-31 23:15:31 +000047 void mangleCXXRtti(QualType T, ASTContext &Context, llvm::raw_ostream &os);
Anders Carlsson3ac86b52009-04-15 05:36:58 +000048 void mangleCXXCtor(const CXXConstructorDecl *D, CXXCtorType Type,
49 ASTContext &Context, llvm::raw_ostream &os);
Anders Carlsson27ae5362009-04-17 01:58:57 +000050 void mangleCXXDtor(const CXXDestructorDecl *D, CXXDtorType Type,
51 ASTContext &Context, llvm::raw_ostream &os);
Douglas Gregor5f2bfd42009-02-13 00:10:09 +000052}
53
Mike Stump1eb44332009-09-09 15:08:12 +000054#endif