]> granicus.if.org Git - clang/commitdiff
Add FIXMEs for the remaining C and C++ expression types that still
authorDouglas Gregor <dgregor@apple.com>
Tue, 19 May 2009 23:29:16 +0000 (23:29 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 19 May 2009 23:29:16 +0000 (23:29 +0000)
need template instantiation logic. Remove one FIXME by instantiating
the callee in a non-type-dependent CXXOperatorCallExpr.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72145 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateInstantiateExpr.cpp
test/SemaTemplate/instantiate-expr-3.cpp

index 56126d45046b3a9505cb0fe65eac02cfbf519438..a0e2941e26d382248566c432db85d87632c248c5 100644 (file)
@@ -60,6 +60,12 @@ namespace {
     OwningExprResult VisitShuffleVectorExpr(ShuffleVectorExpr *E);
     OwningExprResult VisitChooseExpr(ChooseExpr *E);
     OwningExprResult VisitVAArgExpr(VAArgExpr *E);
+    // FIXME: InitListExpr
+    // FIXME: DesignatedInitExpr
+    // FIXME: ImplicitValueInitExpr
+    // FIXME: ExtVectorElementExpr
+    // FIXME: BlockExpr
+    // FIXME: BlockDeclRefExpr
     OwningExprResult VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E);
     OwningExprResult VisitUnresolvedDeclRefExpr(UnresolvedDeclRefExpr *E);
     OwningExprResult VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E);
@@ -67,6 +73,7 @@ namespace {
     OwningExprResult VisitImplicitCastExpr(ImplicitCastExpr *E);
     OwningExprResult VisitExplicitCastExpr(ExplicitCastExpr *E);
     OwningExprResult VisitCStyleCastExpr(CStyleCastExpr *E);
+    // FIXME: CXXMemberCallExpr
     OwningExprResult VisitCXXNamedCastExpr(CXXNamedCastExpr *E);
     OwningExprResult VisitCXXStaticCastExpr(CXXStaticCastExpr *E);
     OwningExprResult VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E);
@@ -75,6 +82,17 @@ namespace {
     OwningExprResult VisitCXXThisExpr(CXXThisExpr *E);
     OwningExprResult VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E);
     OwningExprResult VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E);
+    // FIXME: CXXTypeIdExpr
+    // FIXME: CXXThrowExpr
+    // FIXME: CXXDefaultArgExpr
+    // FIXME: CXXConstructExpr
+    // FIXME: CXXFunctionalCastExpr
+    // FIXME: CXXZeroInitValueExpr
+    // FIXME: CXXNewExpr
+    // FIXME: CXXDeleteExpr
+    // FIXME: UnaryTypeTraitExpr
+    // FIXME: QualifiedDeclRefExpr
+    // FIXME: CXXExprWithTemporaries
     OwningExprResult VisitGNUNullExpr(GNUNullExpr *E);
     OwningExprResult VisitUnresolvedFunctionNameExpr(
                                               UnresolvedFunctionNameExpr *E);
@@ -324,13 +342,17 @@ TemplateExprInstantiator::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) {
     // perform lookup again at instantiation time (C++ [temp.dep]p1).
     // Instead, we just build the new overloaded operator call
     // expression.
+    OwningExprResult Callee = Visit(E->getCallee());
+    if (Callee.isInvalid())
+      return SemaRef.ExprError();
+
     First.release();
     Second.release();
-    // FIXME: Don't reuse the callee here. We need to instantiate it.
+
     return SemaRef.Owned(new (SemaRef.Context) CXXOperatorCallExpr(
                                                        SemaRef.Context, 
                                                        E->getOperator(),
-                                                       E->getCallee(), 
+                                                       Callee.takeAs<Expr>(), 
                                                        Args, E->getNumArgs(),
                                                        E->getType(), 
                                                        E->getOperatorLoc()));
index 7032b1dfdf4710593121fccfe9c3513d16d231a5..87f303057f2cdf293b4e9d6fac4b959d9deb4f7d 100644 (file)
@@ -102,7 +102,7 @@ template struct Choose0<false, int, float, float&>;
 template struct Choose0<true, int, float, float&>; // expected-note{{instantiation}}
 
 // ---------------------------------------------------------------------
-// va_arg
+// __builtin_va_arg
 // ---------------------------------------------------------------------
 template<typename ArgType>
 struct VaArg0 {
@@ -116,3 +116,22 @@ struct VaArg0 {
 };
 
 template struct VaArg0<int>;
+
+// ---------------------------------------------------------------------
+// Vector element expressions
+// ---------------------------------------------------------------------
+#if 0
+// Not supported until we have full support for MemberExpr.
+typedef __attribute__(( ext_vector_type(2) )) double double2;
+typedef __attribute__(( ext_vector_type(4) )) double double4;
+
+template<typename T, typename U>
+struct VectorElem0 {
+  void f(T t, U u) {
+    t.xy = u.zw;
+  }
+};
+
+template struct VectorElem0<double2, double4>;
+template struct VectorElem0<double4, double4>;
+#endif