[cfe-commits] r64425 - in /cfe/trunk: lib/CodeGen/Mangle.cpp test/CodeGen/overloadable.c
Douglas Gregor
dgregor at apple.com
Thu Feb 12 17:28:03 PST 2009
Author: dgregor
Date: Thu Feb 12 19:28:03 2009
New Revision: 64425
URL: http://llvm.org/viewvc/llvm-project?rev=64425&view=rev
Log:
Add mangling for variadic functions and conversion functions
Modified:
cfe/trunk/lib/CodeGen/Mangle.cpp
cfe/trunk/test/CodeGen/overloadable.c
Modified: cfe/trunk/lib/CodeGen/Mangle.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/Mangle.cpp?rev=64425&r1=64424&r2=64425&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/Mangle.cpp (original)
+++ cfe/trunk/lib/CodeGen/Mangle.cpp Thu Feb 12 19:28:03 2009
@@ -161,7 +161,9 @@
break;
case DeclarationName::CXXConversionFunctionName:
- assert(false && "Not sure how to mangle conversion functions yet");
+ // <operator-name> ::= cv <type> # (cast)
+ Out << "cv";
+ mangleType(Context.getCanonicalType(Name.getCXXNameType()));
break;
case DeclarationName::CXXOperatorName:
@@ -171,6 +173,7 @@
case DeclarationName::CXXUsingDirective:
assert(false && "Can't mangle a using directive name!");
+ break;
}
}
@@ -398,7 +401,6 @@
// ::= d # double
// ::= e # long double, __float80
// UNSUPPORTED: ::= g # __float128
- // NOT HERE: ::= z # ellipsis
// UNSUPPORTED: ::= Dd # IEEE 754r decimal floating point (64 bits)
// UNSUPPORTED: ::= De # IEEE 754r decimal floating point (128 bits)
// UNSUPPORTED: ::= Df # IEEE 754r decimal floating point (32 bits)
@@ -455,6 +457,10 @@
ArgEnd = Proto->arg_type_end();
Arg != ArgEnd; ++Arg)
mangleType(*Arg);
+
+ // <builtin-type> ::= z # ellipsis
+ if (Proto->isVariadic())
+ Out << 'z';
}
void CXXNameMangler::mangleType(const TagType *T) {
Modified: cfe/trunk/test/CodeGen/overloadable.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/overloadable.c?rev=64425&r1=64424&r2=64425&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/overloadable.c (original)
+++ cfe/trunk/test/CodeGen/overloadable.c Thu Feb 12 19:28:03 2009
@@ -9,6 +9,8 @@
struct X { };
void __attribute__((overloadable)) f(struct X (*ptr)[10]) { }
+void __attribute__((overloadable)) f(int x, int y, ...) { }
+
int main() {
int iv = 17;
float fv = 3.0f;
More information about the cfe-commits
mailing list