diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.jason/template26.C')
| -rw-r--r-- | gcc/testsuite/g++.old-deja/g++.jason/template26.C | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template26.C b/gcc/testsuite/g++.old-deja/g++.jason/template26.C deleted file mode 100644 index fcd598dda84..00000000000 --- a/gcc/testsuite/g++.old-deja/g++.jason/template26.C +++ /dev/null @@ -1,114 +0,0 @@ -// PRMS Id: 6275 -// Bug: unification fails for call to find_parameter_in_stack. - -#include <stdio.h> -#include <stdlib.h> - -const int max_stack_size = 20; - -template <class T> -class Stack { - private: - T objects[max_stack_size]; - int nobjects; - public: - Stack(): nobjects(0) {} - void push(const T&a) { - if (nobjects >= max_stack_size) { - fprintf(stderr,"Stack: overflow\n"); - abort(); - } - objects[nobjects++] = a; - } - T pop() { - if (!nobjects) { - fprintf(stderr,"Stack: underflow\n"); - abort(); - } - nobjects -= 1; - T result = objects[nobjects]; - return result; - } - T top() const { - if (!nobjects) { - fprintf(stderr,"Stack: underflow\n"); - abort(); - } - return objects[nobjects - 1]; - } - int n() const { return nobjects; } - T operator[](int i) { return objects[i]; } -}; - -template <class T> -class Parameter { - T parameter_; - int is_set_; - int overrides_; - public: - Parameter(): is_set_(0), overrides_(0) {} - void set(const T& a) { parameter_ = a; is_set_ = 1; } - void override(int overrides = 1) { overrides_ = overrides; } - const T& value() const { return parameter_; } - int overrides() const { return overrides_; } - int is_set() const { return is_set_; } -}; - -template <class T1, class T2> -T2 -find_parameter_in_stack(Stack<T1>& stack, Parameter<T2>& (T1::*access)()) -{ - T2 result; - int have_result = 0; - for (int i=stack.n()-1; i>=0; i--) { - if ((stack[i].*access)().is_set()) { - if (!have_result || (stack[i].*access)().overrides()) { - result = (stack[i].*access)().value(); - have_result = 1; - } - } - } - return result; -} - -class A { - private: - Parameter<int> a_; - public: - A() { } - Parameter<int>& a() { return a_; } -}; - -int -main(int, char**) -{ - Stack<A> A_stack; - A a1; - A a2; - a1.a().set(1); - a2.a().set(2); - A_stack.push(a1); - A_stack.push(a2); - - int val = find_parameter_in_stack(A_stack, &A::a); - - printf("val = %d\n", val); - if (val != 2) - return 1; - - A_stack.pop(); - A_stack.pop(); - - a1.a().override(); - - A_stack.push(a1); - A_stack.push(a2); - - val = find_parameter_in_stack(A_stack, &A::a); - - printf("val = %d\n", val); - if (val != 1) - return 1; - - return 0; -} |
