1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 400073. Avoid premature removal from recusion protection sets.

This commit is contained in:
Sergey Prigogin 2013-07-17 15:21:16 -07:00
parent 508bc8720d
commit bdbfa25c7b
4 changed files with 14 additions and 13 deletions

View file

@ -179,10 +179,10 @@ public class CPPClassSpecialization extends CPPSpecialization
IBinding result;
Set<IBinding> recursionProtectionSet= fInProgress.get();
try {
if (!recursionProtectionSet.add(original))
return RecursionResolvingBinding.createFor(original, point);
if (!recursionProtectionSet.add(original))
return RecursionResolvingBinding.createFor(original, point);
try {
result= CPPTemplates.createSpecialization(this, original, point);
} finally {
recursionProtectionSet.remove(original);

View file

@ -2009,11 +2009,12 @@ public class CPPVisitor extends ASTQueries {
private static IType createAutoType(final IASTDeclSpecifier declSpec, IASTDeclarator declarator) {
Set<IASTDeclSpecifier> recursionProtectionSet = autoTypeDeclSpecs.get();
if (!recursionProtectionSet.add(declSpec)) {
// Detected a self referring auto type, e.g.: auto x = x;
return new ProblemType(ISemanticProblem.TYPE_CANNOT_DEDUCE_AUTO_TYPE);
}
try {
if (!recursionProtectionSet.add(declSpec)) {
// Detected a self referring auto type, e.g.: auto x = x;
return new ProblemType(ISemanticProblem.TYPE_CANNOT_DEDUCE_AUTO_TYPE);
}
if (declarator instanceof ICPPASTFunctionDeclarator) {
return createAutoFunctionType(declSpec, (ICPPASTFunctionDeclarator) declarator);
}

View file

@ -116,10 +116,10 @@ public class CompositeCPPClassSpecialization extends CompositeCPPClassType imple
IBinding newSpec;
Set<IBinding> recursionProtectionSet= fInProgress.get();
try {
if (!recursionProtectionSet.add(original))
return RecursionResolvingBinding.createFor(original, point);
if (!recursionProtectionSet.add(original))
return RecursionResolvingBinding.createFor(original, point);
try {
newSpec= CPPTemplates.createSpecialization(this, original, point);
} finally {
recursionProtectionSet.remove(original);

View file

@ -145,10 +145,10 @@ class PDOMCPPClassSpecialization extends PDOMCPPSpecialization implements
IBinding newSpec;
Set<IBinding> recursionProtectionSet= fInProgress.get();
try {
if (!recursionProtectionSet.add(original))
return RecursionResolvingBinding.createFor(original, point);
if (!recursionProtectionSet.add(original))
return RecursionResolvingBinding.createFor(original, point);
try {
newSpec= CPPTemplates.createSpecialization(this, original, point);
} finally {
recursionProtectionSet.remove(original);