]> granicus.if.org Git - clang/commitdiff
Add IR generation support for SizeOfPackExpr.
authorDouglas Gregor <dgregor@apple.com>
Wed, 12 Jan 2011 22:11:34 +0000 (22:11 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 12 Jan 2011 22:11:34 +0000 (22:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123332 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprScalar.cpp
test/CodeGenCXX/variadic-templates.cpp [new file with mode: 0644]

index 6b22fc48d4c52617c1d002905faa499c03aae4aa..f80304d6de6b1fe64e6ed8e5ebb2655d792c6ffe 100644 (file)
@@ -195,6 +195,11 @@ public:
     return Builder.CreateBitCast(V, ConvertType(E->getType()));
   }
 
+  Value *VisitSizeOfPackExpr(SizeOfPackExpr *E) {
+    return llvm::ConstantInt::get(ConvertType(E->getType()), 
+                                  E->getPackLength());
+  }
+    
   // l-values.
   Value *VisitDeclRefExpr(DeclRefExpr *E) {
     Expr::EvalResult Result;
diff --git a/test/CodeGenCXX/variadic-templates.cpp b/test/CodeGenCXX/variadic-templates.cpp
new file mode 100644 (file)
index 0000000..5faeba4
--- /dev/null
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -std=c++0x -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
+
+template<typename ...Types>
+int get_num_types(Types...) {
+  return sizeof...(Types);
+}
+
+// CHECK: define weak_odr i32 @_Z13get_num_typesIJifdEEispT_
+// CHECK: ret i32 3
+template int get_num_types(int, float, double);
+
+