aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C')
-rw-r--r--gcc-4.8/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C52
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc-4.8/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C b/gcc-4.8/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C
new file mode 100644
index 000000000..7e4aab6f0
--- /dev/null
+++ b/gcc-4.8/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C
@@ -0,0 +1,52 @@
+// { dg-do run }
+// g++ 1.36.1 bug 900220_03
+
+// g++ does not properly disambiguate calls to overloaded functions
+// which are nearly identical except that one take a reference to a
+// type `T' object and another takes a reference to a type `const T'
+// object.
+
+// (Note that the volatile stuff is commented out here because cfront
+// does not yet grok volatile.)
+
+// Cfront 2.0 passes this test.
+
+// keywords: references, overloading, type qualifiers, pointers
+
+int c_call_count = 0;
+int cc_call_count = 0;
+//int vc_call_count = 0;
+
+void overloaded (char&)
+{
+ c_call_count++;
+}
+
+void overloaded (const char&)
+{
+ cc_call_count++;
+}
+
+//void overloaded (volatile char&)
+//{
+// vc_call_count++;
+//}
+
+int test ()
+{
+ char c = 0;
+ const char cc = 0;
+ //volatile char vc = 0;
+
+ char& cr = c;
+ const char& ccr = cc;
+ //volatile char& vcr = vc;
+
+ overloaded (c); // OK
+ overloaded (cc); // { dg-bogus "" }
+ //overloaded (vc); // OK
+
+ return (c_call_count != 1 || cc_call_count != 1 /* || vc_call_count != 1 */);
+}
+
+int main () { return test (); }