]> granicus.if.org Git - clang/commitdiff
Tests for C++ [expr], from James Porter!
authorDouglas Gregor <dgregor@apple.com>
Thu, 8 Oct 2009 22:38:14 +0000 (22:38 +0000)
committerDouglas Gregor <dgregor@apple.com>
Thu, 8 Oct 2009 22:38:14 +0000 (22:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83588 91177308-0d34-0410-b5e6-96231b3b80d8

test/CXX/expr/p3.cpp [new file with mode: 0644]
test/CXX/expr/p8.cpp [new file with mode: 0644]
test/CXX/expr/p9.cpp [new file with mode: 0644]
www/cxx_status.html

diff --git a/test/CXX/expr/p3.cpp b/test/CXX/expr/p3.cpp
new file mode 100644 (file)
index 0000000..40fe052
--- /dev/null
@@ -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 (file)
index 0000000..4f02497
--- /dev/null
@@ -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 (file)
index 0000000..1eec3cf
--- /dev/null
@@ -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<bool T> struct selector;
+template<> struct selector<true> { typedef long type; };
+template<> struct selector<false> {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;
index 81e3a8823424c302a5e2fe4d9d36b3a2f8983e83..b6208e657641958d9cf4fbf7a33a617fb5032c0e 100644 (file)
@@ -534,8 +534,8 @@ welcome!</p>
   <td>5 [expr]</td>
   <td class="na">N/A</td>
   <td class="na">N/A</td>
-  <td class="complete" align="center"></td>
-  <td></td>
+  <td class="complete" align="center">&#x2713;</td>
+  <td class="na">N/A</td>
   <td></td>
 </tr>
 <tr>