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:
parent
508bc8720d
commit
bdbfa25c7b
4 changed files with 14 additions and 13 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue