Checking that a template-parameter is not used in its own default argument

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Checking that a template-parameter is not used in its own default argument

Mark Greve
Hello,

I am trying to get into development on clang, and I thought I would try
to fix a bug initially. I have written some code that partially
implements the check in Sema/SemaTemplate.cpp in the function
ActOnTypeParameterDefault to check that a template-parameter is not used
in its own default argument.

Anyway my problem is this test case:

typedef int T;

template <typename T = T> struct X {
    T x;
};

int main() {
    X<> foo;
    foo.x = 5;
}

g++-4.3.3 compiles this without a hitch, but clang fails with:

test.cc:9:8: error: incompatible type assigning 'int', expected
'type-parameter-0-0'
        foo.x = 5;

and if I remove foo.x = 5;, clang crashes with clang:
ASTContext.cpp:593: std::pair<long unsigned int, unsigned int>
clang::ASTContext::getTypeInfo(const clang::Type*): Assertion `false &&
"Should not see dependent types"' failed.

In other words g++ thinks that the default argument to the
template-parameter is the typedef and clang thinks it is the
template-parameter itself. I'm not sure which is the right
interpretation, but I'm guessing that g++ is correct here.

Should I file a bug report with this test case? Also, I would like to
know whether it is reasonable that I continue working on implementing
the check on the default argument. If not I'll try to find something
easier to work on.

Best,
Mark Greve
_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev