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