diff options
author | Nathan Ridge | 2013-07-02 01:55:12 +0000 |
---|---|---|
committer | Sergey Prigogin | 2013-07-17 18:40:49 +0000 |
commit | 884f6e2044e05efa25c90dcc8d9bafd3e2c0061f (patch) | |
tree | 6b247616d72ba24e27121bbaf56f3a623d3e15b6 | |
parent | 01b1f9a14af5d243cd7ac97de856b0835b166a9e (diff) | |
download | org.eclipse.cdt-884f6e2044e05efa25c90dcc8d9bafd3e2c0061f.tar.gz org.eclipse.cdt-884f6e2044e05efa25c90dcc8d9bafd3e2c0061f.tar.xz org.eclipse.cdt-884f6e2044e05efa25c90dcc8d9bafd3e2c0061f.zip |
Bug 408303 - [C++11] Incorrect member not initialized warnings for
template class's defaulted constructors
Change-Id: I61064421c2cee405c9a915abe500c94fa4423eef
Signed-off-by: Nathan Ridge <zeratul976@hotmail.com>
Reviewed-on: https://git.eclipse.org/r/14177
Reviewed-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
IP-Clean: Sergey Prigogin <eclipse.sprigogin@gmail.com>
Tested-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
2 files changed, 19 insertions, 1 deletions
diff --git a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ClassMembersInitializationCheckerTest.java b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ClassMembersInitializationCheckerTest.java index be2e57fb593..33a156feb3e 100644 --- a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ClassMembersInitializationCheckerTest.java +++ b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ClassMembersInitializationCheckerTest.java @@ -590,6 +590,8 @@ public class ClassMembersInitializationCheckerTest extends CheckerTestCase { } // struct S { + // int i; + // // S(S&) = default; // S(const S&) = default; // S(volatile S&) = default; @@ -604,6 +606,18 @@ public class ClassMembersInitializationCheckerTest extends CheckerTestCase { checkNoErrors(); } + // template <typename T> + // struct S { + // int i; + // + // S(const S&) = default; + // S(S&&) = default; + // }; + public void testBug408303_defaultCopyOrMoveConstructorInTemplate() throws Exception { + loadCodeAndRun(getAboveComment()); + checkNoErrors(); + } + // struct A { // A(int n) : waldo(n) {} // A() : A(42) {} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/SemanticQueries.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/SemanticQueries.java index 60fd014f6c4..523fd65593c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/SemanticQueries.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/SemanticQueries.java @@ -14,6 +14,7 @@ import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUti import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.TDEF; import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPTemplates; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil; /** @@ -57,7 +58,10 @@ public class SemanticQueries { return false; firstArgumentType = firstArgReferenceType.getType(); firstArgumentType = SemanticUtil.getNestedType(firstArgumentType, CVTYPE); - return firstArgumentType.isSameType(constructor.getClassOwner()); + ICPPClassType classType = constructor.getClassOwner(); + if (classType instanceof ICPPClassTemplate) + classType = CPPTemplates.createDeferredInstance((ICPPClassTemplate) classType); + return firstArgumentType.isSameType(classType); } private static boolean isCallableWithNumberOfArguments(ICPPFunction function, int numArguments) { |