]> granicus.if.org Git - clang/commitdiff
Support unary type traits in a scalar context. Not that I've actually seen
authorEli Friedman <eli.friedman@gmail.com>
Thu, 10 Dec 2009 22:40:32 +0000 (22:40 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 10 Dec 2009 22:40:32 +0000 (22:40 +0000)
this construct, but might as well for completeness.

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

lib/CodeGen/CGExprScalar.cpp
test/CodeGenCXX/unary-type-trait.cpp [new file with mode: 0644]

index 1ce4c5aef4c21bac6f1ce6232e4ac8aa2b195d19..dfa5b2026ccc4e442f2fafd449e17f0cd9500dba 100644 (file)
@@ -263,6 +263,10 @@ public:
     CGF.EmitCXXDeleteExpr(E);
     return 0;
   }
+  Value *VisitUnaryTypeTraitExpr(const UnaryTypeTraitExpr *E) {
+    return llvm::ConstantInt::get(Builder.getInt1Ty(),
+                                  E->EvaluateTrait(CGF.getContext()));
+  }
 
   Value *VisitCXXPseudoDestructorExpr(const CXXPseudoDestructorExpr *E) {
     // C++ [expr.pseudo]p1:
diff --git a/test/CodeGenCXX/unary-type-trait.cpp b/test/CodeGenCXX/unary-type-trait.cpp
new file mode 100644 (file)
index 0000000..b65b9f9
--- /dev/null
@@ -0,0 +1,3 @@
+// RUN: clang-cc -emit-llvm-only -verify %s
+
+bool a() { return __is_pod(int); }