forked from OSchip/llvm-project
Types appearing more than once in a spec shouldn't matter.
llvm-svn: 83766
This commit is contained in:
parent
2dccb8571e
commit
6e4c871855
|
@ -117,16 +117,21 @@ bool Sema::CheckEquivalentExceptionSpec(
|
|||
bool Success = true;
|
||||
// Both have a definite exception spec. Collect the first set, then compare
|
||||
// to the second.
|
||||
llvm::SmallPtrSet<const Type*, 8> Types;
|
||||
llvm::SmallPtrSet<const Type*, 8> OldTypes, NewTypes;
|
||||
for (FunctionProtoType::exception_iterator I = Old->exception_begin(),
|
||||
E = Old->exception_end(); I != E; ++I)
|
||||
Types.insert(Context.getCanonicalType(*I).getTypePtr());
|
||||
OldTypes.insert(Context.getCanonicalType(*I).getTypePtr());
|
||||
|
||||
for (FunctionProtoType::exception_iterator I = New->exception_begin(),
|
||||
E = New->exception_end(); I != E && Success; ++I)
|
||||
Success = Types.erase(Context.getCanonicalType(*I).getTypePtr());
|
||||
E = New->exception_end(); I != E && Success; ++I) {
|
||||
const Type *TypePtr = Context.getCanonicalType(*I).getTypePtr();
|
||||
if(OldTypes.count(TypePtr))
|
||||
NewTypes.insert(TypePtr);
|
||||
else
|
||||
Success = false;
|
||||
}
|
||||
|
||||
Success = Success && Types.empty();
|
||||
Success = Success && OldTypes.size() == NewTypes.size();
|
||||
|
||||
if (Success) {
|
||||
return false;
|
||||
|
|
|
@ -62,6 +62,10 @@ void r7() throw(float); // expected-error {{exception specification in declarati
|
|||
void r8() throw(int);
|
||||
void r8() throw(const int);
|
||||
|
||||
// Multiple appearances don't matter.
|
||||
void r9() throw(int, int);
|
||||
void r9() throw(int, int);
|
||||
|
||||
struct A
|
||||
{
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue