diff options
Diffstat (limited to 'codan')
2 files changed, 18 insertions, 0 deletions
diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ProblemBindingChecker.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ProblemBindingChecker.java index 75e2ecba211..a309e728b51 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ProblemBindingChecker.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ProblemBindingChecker.java @@ -35,6 +35,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IFunctionType; import org.eclipse.cdt.core.dom.ast.IProblemBinding; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclarator; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLiteralExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; @@ -245,6 +246,9 @@ public class ProblemBindingChecker extends AbstractIndexAstChecker { } } else if (parentNode instanceof ICPPASTDeclarator && name instanceof IASTImplicitName) { return true; + } else if (parentNode instanceof ICPPASTLiteralExpression && name instanceof IASTImplicitName) { + // Implicit name for user-defined literal operator. + return true; } return false; } diff --git a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ProblemBindingCheckerTest.java b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ProblemBindingCheckerTest.java index 3e250a259cd..67cbccdadae 100644 --- a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ProblemBindingCheckerTest.java +++ b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ProblemBindingCheckerTest.java @@ -95,4 +95,18 @@ public class ProblemBindingCheckerTest extends CheckerTestCase { IMarker marker = checkErrorLine(3, ProblemBindingChecker.ERR_ID_FunctionResolutionProblem); assertFalse(marker.getAttribute(IMarker.MESSAGE, "").contains("MACRO")); //$NON-NLS-1$//$NON-NLS-2$ } + + // auto d = 42_waldo; + public void testNonexistentUDLOperator_484619() { + loadCodeAndRun(getAboveComment()); + checkErrorLine(1, ProblemBindingChecker.ERR_ID_FunctionResolutionProblem); + } + + // struct R {}; + // R operator "" _waldo(const char*, unsigned long); // expects a string literal + // auto d = 42_waldo; // passing an integer + public void testUDLOperatorWithWrongType_484619() { + loadCodeAndRun(getAboveComment()); + checkErrorLine(3, ProblemBindingChecker.ERR_ID_InvalidArguments); + } } |