diff --git a/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java b/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java index 5fbd21a5ecb..68290b6dfa6 100644 --- a/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java +++ b/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java @@ -504,4 +504,15 @@ public class ReturnCheckerTest extends CheckerTestCase { public void testFunctionWithAttribute_519105() throws Exception { checkSampleAboveCpp(); } + + // template + // [[noreturn]] void foo(const T& e) { + // throw e; + // } + // int bar() { + // foo(5); + // } + public void testTemplateFunctionNoReturn() throws Exception { + checkSampleAboveCpp(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java index bc9cd9b9ac8..5f6de123898 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java @@ -734,7 +734,10 @@ public class CPPFunction extends PlatformObject implements ICPPFunction, ICPPInt @Override public boolean isNoReturn() { - ICPPASTFunctionDeclarator dtor = getPreferredDtor(); + return isNoReturn(getPreferredDtor()); + } + + public static boolean isNoReturn(ICPPASTFunctionDeclarator dtor) { if (dtor == null) { return false; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java index 9ed186ffce4..a5e631763ee 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java @@ -36,7 +36,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameter; -import org.eclipse.cdt.core.parser.util.AttributeUtil; import org.eclipse.cdt.internal.core.dom.parser.ASTInternal; import org.eclipse.cdt.internal.core.dom.parser.ASTQueries; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor; @@ -390,11 +389,7 @@ public class CPPFunctionTemplate extends CPPTemplateDefinition implements ICPPFu @Override public boolean isNoReturn() { - ICPPASTFunctionDeclarator fdecl = getFirstFunctionDtor(); - if (fdecl != null) { - return AttributeUtil.hasNoreturnAttribute(fdecl); - } - return false; + return CPPFunction.isNoReturn(getFirstFunctionDtor()); } private IASTDeclarator getDeclaratorByName(IASTNode node) {