From b656d8823571ad206cd756f58bac941d25765519 Mon Sep 17 00:00:00 2001
From: Douglas Gregor
Date: Thu, 8 Oct 2009 22:38:14 +0000
Subject: [PATCH] Tests for C++ [expr], from James Porter!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83588 91177308-0d34-0410-b5e6-96231b3b80d8
---
test/CXX/expr/p3.cpp | 15 +++++++++++++
test/CXX/expr/p8.cpp | 18 ++++++++++++++++
test/CXX/expr/p9.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++
www/cxx_status.html | 4 ++--
4 files changed, 85 insertions(+), 2 deletions(-)
create mode 100644 test/CXX/expr/p3.cpp
create mode 100644 test/CXX/expr/p8.cpp
create mode 100644 test/CXX/expr/p9.cpp
diff --git a/test/CXX/expr/p3.cpp b/test/CXX/expr/p3.cpp
new file mode 100644
index 0000000000..40fe052f63
--- /dev/null
+++ b/test/CXX/expr/p3.cpp
@@ -0,0 +1,15 @@
+// RUN: clang-cc -fsyntax-only -verify %s
+
+double operator +(double, double); // expected-error{{overloaded 'operator+' must have at least one parameter of class or enumeration type}}
+
+struct A
+{
+ operator int();
+};
+
+int main()
+{
+ A a, b;
+ int i0 = a + 1;
+ int i1 = a + b;
+}
diff --git a/test/CXX/expr/p8.cpp b/test/CXX/expr/p8.cpp
new file mode 100644
index 0000000000..4f02497486
--- /dev/null
+++ b/test/CXX/expr/p8.cpp
@@ -0,0 +1,18 @@
+// RUN: clang-cc -fsyntax-only -verify %s
+
+int a0;
+const volatile int a1;
+int a2[16];
+int a3();
+
+void f0(int);
+void f1(int *);
+void f2(int (*)());
+
+int main()
+{
+ f0(a0);
+ f0(a1);
+ f1(a2);
+ f2(a3);
+}
diff --git a/test/CXX/expr/p9.cpp b/test/CXX/expr/p9.cpp
new file mode 100644
index 0000000000..1eec3cf0b9
--- /dev/null
+++ b/test/CXX/expr/p9.cpp
@@ -0,0 +1,50 @@
+// RUN: clang-cc -fsyntax-only -verify %s
+
+// floating-point overloads
+
+__typeof__(0 + 0.0L) ld0;
+long double &ldr = ld0;
+
+__typeof__(0 + 0.0) d0;
+double &dr = d0;
+
+__typeof__(0 + 0.0f) f0;
+float &fr = f0;
+
+// integral promotions
+
+signed char c0;
+__typeof__(c0 + c0) c1;
+int &cr = c1;
+
+unsigned char uc0;
+__typeof__(uc0 + uc0) uc1;
+int &ucr = uc1;
+
+short s0;
+__typeof__(s0 + s0) s1;
+int &sr = s1;
+
+unsigned short us0;
+__typeof__(us0 + us0) us1;
+int &usr = us1;
+
+// integral overloads
+
+__typeof__(0 + 0UL) ul0;
+unsigned long &ulr = ul0;
+
+template struct selector;
+template<> struct selector { typedef long type; };
+template<> struct selector {typedef unsigned long type; };
+__typeof__(0U + 0L) ui_l0;
+selector<(sizeof(long) > sizeof(unsigned int))>::type &ui_lr = ui_l0;
+
+__typeof__(0 + 0L) l0;
+long &lr = l0;
+
+__typeof__(0 + 0U) u0;
+unsigned &ur = u0;
+
+__typeof__(0 + 0) i0;
+int &ir = i0;
diff --git a/www/cxx_status.html b/www/cxx_status.html
index 81e3a88234..b6208e6576 100644
--- a/www/cxx_status.html
+++ b/www/cxx_status.html
@@ -534,8 +534,8 @@ welcome!
5 [expr] |
N/A |
N/A |
- |
- |
+ ✓ |
+ N/A |
|