diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 41fe973a720..5dffa35177c 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -261,6 +261,7 @@ public class AST2CPPTests extends AST2BaseTest { assertEquals(defNames.length, j); } + @Override protected void assertSameType(IType first, IType second){ assertNotNull(first); assertNotNull(second); @@ -10079,4 +10080,42 @@ public class AST2CPPTests extends AST2BaseTest { helper.assertNonProblemOnFirstIdentifier("fint({vbool"); helper.assertNonProblemOnFirstIdentifier("fint({vchar"); } + + // namespace std { + // struct string {}; + // struct exception {}; + // } + // void f(){} + // + // int problemA(int i) { + // return i ? throw 7 : i; + // } + // int problemB(int i) { + // return i ? throw std::string{} : i; + // } + // void ploblemC(int i) { + // return i ? throw std::exception() : throw 3; + // } + // void ploblemD(int i) { + // return i ? throw std::exception() : f(); + // } + // std::string ploblemE(int i) { + // return i ? throw 3 : "a"; + // } + // std::string ploblemF(int i) { + // return (i<2 ? throw 2 : "x") ? (i>2 ? throw 3 : "d") : (i>22 ? throw 4 : "e"); + // } + // auto ploblemG(int i) ->decltype(i ? throw 3 : "d"){ + // return i ? throw 3 : "d" ; + // } + // void fine1(int i) { + // return i ? f() : f(); + // } + // std::string fine2(int i) { + // return i ? "a" : "b"; + // } + public void testThrowExpressionInConditional_396663() throws Exception { + parseAndCheckBindings(getAboveComment(), CPP, true); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 6f3083e69b8..50d5b8b6c1a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -942,7 +942,6 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { lt1= LT(1); if (lt1 != IToken.tCOLON && lt1 != IToken.tCOMMA) stopWithNextOperator= true; - break; } else if (allowBraceInitializer && LT(1) == IToken.tLBRACE) { // Brace initializer expr= bracedInitList(true); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index 877e605ba48..717bd660ad6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -663,7 +663,9 @@ public class CPPTemplates { IBinding owner = template.getOwner(); ICPPClassSpecialization within = getSpecializationContext(owner); IType instantiatedType = instantiateType(aliasedType, parameterMap, -1, within, id); - return new CPPAliasTemplateInstance(id.toCharArray(), aliasTemplate, instantiatedType); + StringBuilder buf= new StringBuilder(); + buf.append(id.getSimpleID()).append(ASTTypeUtil.getArgumentListString(args, false)); + return new CPPAliasTemplateInstance(buf.toString().toCharArray(), aliasTemplate, instantiatedType); } // Class template.