mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-01 05:15:43 +02:00
Don't report unknown built-in functions as problems.
This commit is contained in:
parent
3f6d140713
commit
fa881229a6
4 changed files with 28 additions and 10 deletions
|
@ -40,6 +40,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||||
|
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.ASTQueries;
|
import org.eclipse.cdt.internal.core.dom.parser.ASTQueries;
|
||||||
|
|
||||||
public class ProblemBindingChecker extends AbstractIndexAstChecker {
|
public class ProblemBindingChecker extends AbstractIndexAstChecker {
|
||||||
|
@ -145,6 +146,10 @@ public class ProblemBindingChecker extends AbstractIndexAstChecker {
|
||||||
if (id != IProblemBinding.SEMANTIC_NAME_NOT_FOUND) {
|
if (id != IProblemBinding.SEMANTIC_NAME_NOT_FOUND) {
|
||||||
return PROCESS_CONTINUE;
|
return PROCESS_CONTINUE;
|
||||||
}
|
}
|
||||||
|
if (problemBinding.getID() == IProblemBinding.SEMANTIC_NAME_NOT_FOUND &&
|
||||||
|
CharArrayUtils.startsWith(problemBinding.getNameCharArray(), "__builtin_")) { //$NON-NLS-1$
|
||||||
|
return PROCESS_CONTINUE; // Ignore an unknown built-in.
|
||||||
|
}
|
||||||
if (isFunctionCall(name, parentNode)) {
|
if (isFunctionCall(name, parentNode)) {
|
||||||
handleFunctionProblem(name, problemBinding, contextFlagsString);
|
handleFunctionProblem(name, problemBinding, contextFlagsString);
|
||||||
} else if (parentNode instanceof IASTFieldReference) {
|
} else if (parentNode instanceof IASTFieldReference) {
|
||||||
|
@ -152,7 +157,7 @@ public class ProblemBindingChecker extends AbstractIndexAstChecker {
|
||||||
} else if (parentNode instanceof IASTNamedTypeSpecifier) {
|
} else if (parentNode instanceof IASTNamedTypeSpecifier) {
|
||||||
reportProblem(ERR_ID_TypeResolutionProblem, name, name.getRawSignature(), contextFlagsString);
|
reportProblem(ERR_ID_TypeResolutionProblem, name, name.getRawSignature(), contextFlagsString);
|
||||||
} else {
|
} else {
|
||||||
// Probably a variable
|
// Probably a variable.
|
||||||
handleVariableProblem(name, contextFlagsString);
|
handleVariableProblem(name, contextFlagsString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,13 +109,13 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider {
|
||||||
function("void", "__builtin_va_end", "va_list");
|
function("void", "__builtin_va_end", "va_list");
|
||||||
function("void", "__builtin_va_copy", "va_list", "va_list");
|
function("void", "__builtin_va_copy", "va_list", "va_list");
|
||||||
|
|
||||||
// Gcc 4.6.0, Section 6.48
|
// GCC 4.6.0, Section 6.48
|
||||||
function("void*", "__builtin_return_address", "unsigned int");
|
function("void*", "__builtin_return_address", "unsigned int");
|
||||||
function("void*", "__builtin_extract_return_address", "void*");
|
function("void*", "__builtin_extract_return_address", "void*");
|
||||||
function("void*", "__builtin_frob_return_address", "void*");
|
function("void*", "__builtin_frob_return_address", "void*");
|
||||||
function("void*", "__builtin_frame_address", "unsigned int");
|
function("void*", "__builtin_frame_address", "unsigned int");
|
||||||
|
|
||||||
// Gcc 4.6.0, Section 6.51
|
// GCC 4.6.0, Section 6.51
|
||||||
String[] types= {"int", "long", "long long", "unsigned int", "unsigned long", "unsigned long long"};
|
String[] types= {"int", "long", "long long", "unsigned int", "unsigned long", "unsigned long long"};
|
||||||
for (String type : types) {
|
for (String type : types) {
|
||||||
// Manual does not mention volatile, however functions can be used for ptr to volatile
|
// Manual does not mention volatile, however functions can be used for ptr to volatile
|
||||||
|
@ -137,7 +137,7 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider {
|
||||||
}
|
}
|
||||||
function("void", "__sync_synchronize");
|
function("void", "__sync_synchronize");
|
||||||
|
|
||||||
// Gcc 4.6.0, Section 6.52
|
// GCC 4.8, Section 6.52
|
||||||
for (String type : types) {
|
for (String type : types) {
|
||||||
// Manual does not mention volatile, however functions can be used for ptr to volatile
|
// Manual does not mention volatile, however functions can be used for ptr to volatile
|
||||||
String typePtr= "volatile " + type + "*";
|
String typePtr= "volatile " + type + "*";
|
||||||
|
@ -171,7 +171,7 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider {
|
||||||
function("bool", "__atomic_is_lock_free", "size_t", "void*");
|
function("bool", "__atomic_is_lock_free", "size_t", "void*");
|
||||||
}
|
}
|
||||||
|
|
||||||
// GCC 4.8.0, Section 6.55 (incomplete)
|
// GCC 4.8, Section 6.55 (incomplete)
|
||||||
function("void", "__builtin_abort", "void");
|
function("void", "__builtin_abort", "void");
|
||||||
function("int", "__builtin_abs", "int");
|
function("int", "__builtin_abs", "int");
|
||||||
function("double", "__builtin_acos", "double");
|
function("double", "__builtin_acos", "double");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2007, 2012 Wind River Systems, Inc. and others.
|
* Copyright (c) 2007, 2013 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -51,6 +51,7 @@ import org.eclipse.cdt.core.index.IIndexInclude;
|
||||||
import org.eclipse.cdt.core.parser.FileContent;
|
import org.eclipse.cdt.core.parser.FileContent;
|
||||||
import org.eclipse.cdt.core.parser.IProblem;
|
import org.eclipse.cdt.core.parser.IProblem;
|
||||||
import org.eclipse.cdt.core.parser.ISignificantMacros;
|
import org.eclipse.cdt.core.parser.ISignificantMacros;
|
||||||
|
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.ASTInternal;
|
import org.eclipse.cdt.internal.core.dom.parser.ASTInternal;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
|
||||||
import org.eclipse.cdt.internal.core.index.FileContentKey;
|
import org.eclipse.cdt.internal.core.index.FileContentKey;
|
||||||
|
@ -72,6 +73,7 @@ import org.eclipse.osgi.util.NLS;
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
abstract public class PDOMWriter {
|
abstract public class PDOMWriter {
|
||||||
|
private static final boolean REPORT_UNKNOWN_BUILTINS = false;
|
||||||
|
|
||||||
public static class FileInAST {
|
public static class FileInAST {
|
||||||
final IASTPreprocessorIncludeStatement includeStatement;
|
final IASTPreprocessorIncludeStatement includeStatement;
|
||||||
|
@ -343,9 +345,14 @@ abstract public class PDOMWriter {
|
||||||
binding instanceof ICPPFunctionTemplate)) {
|
binding instanceof ICPPFunctionTemplate)) {
|
||||||
na[0]= null;
|
na[0]= null;
|
||||||
} else if (binding instanceof IProblemBinding) {
|
} else if (binding instanceof IProblemBinding) {
|
||||||
fStatistics.fProblemBindingCount++;
|
IProblemBinding problemBinding = (IProblemBinding) binding;
|
||||||
if (fShowProblems) {
|
if (REPORT_UNKNOWN_BUILTINS ||
|
||||||
reportProblem((IProblemBinding) binding);
|
problemBinding.getID() != IProblemBinding.BINDING_NOT_FOUND ||
|
||||||
|
!CharArrayUtils.startsWith(problemBinding.getNameCharArray(), "__builtin_")) { //$NON-NLS-1$
|
||||||
|
fStatistics.fProblemBindingCount++;
|
||||||
|
if (fShowProblems) {
|
||||||
|
reportProblem(problemBinding);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (name.isReference()) {
|
} else if (name.isReference()) {
|
||||||
if (binding instanceof ICPPTemplateParameter ||
|
if (binding instanceof ICPPTemplateParameter ||
|
||||||
|
|
|
@ -58,6 +58,7 @@ import org.eclipse.cdt.core.index.IIndex;
|
||||||
import org.eclipse.cdt.core.index.IIndexBinding;
|
import org.eclipse.cdt.core.index.IIndexBinding;
|
||||||
import org.eclipse.cdt.core.index.IIndexFile;
|
import org.eclipse.cdt.core.index.IIndexFile;
|
||||||
import org.eclipse.cdt.core.index.IIndexName;
|
import org.eclipse.cdt.core.index.IIndexName;
|
||||||
|
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.PreferenceConstants;
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
import org.eclipse.cdt.ui.text.ISemanticToken;
|
import org.eclipse.cdt.ui.text.ISemanticToken;
|
||||||
|
@ -1321,7 +1322,7 @@ public class SemanticHighlightings {
|
||||||
public boolean consumes(ISemanticToken token) {
|
public boolean consumes(ISemanticToken token) {
|
||||||
IASTNode node= token.getNode();
|
IASTNode node= token.getNode();
|
||||||
if (node.getTranslationUnit().isBasedOnIncompleteIndex()) {
|
if (node.getTranslationUnit().isBasedOnIncompleteIndex()) {
|
||||||
// Do not highlight problems is the AST is unreliable.
|
// Do not highlight problems if the AST is unreliable.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (node instanceof IASTProblem) {
|
if (node instanceof IASTProblem) {
|
||||||
|
@ -1329,6 +1330,11 @@ public class SemanticHighlightings {
|
||||||
}
|
}
|
||||||
IBinding binding= token.getBinding();
|
IBinding binding= token.getBinding();
|
||||||
if (binding instanceof IProblemBinding) {
|
if (binding instanceof IProblemBinding) {
|
||||||
|
IProblemBinding problemBinding = (IProblemBinding) binding;
|
||||||
|
if (problemBinding.getID() == IProblemBinding.SEMANTIC_NAME_NOT_FOUND &&
|
||||||
|
CharArrayUtils.startsWith(problemBinding.getNameCharArray(), "__builtin_")) { //$NON-NLS-1$
|
||||||
|
return false; // Ignore an unknown built-in.
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Add table
Reference in a new issue