From e3d42ea52937c746a7e45e55171ed073789ad45e Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 17 Jul 2007 08:31:48 +0000 Subject: [PATCH] Fix and testcase for 196468, gcc-extension for C89: empty braces in initializer. --- .../cdt/core/parser/tests/ast2/AST2Tests.java | 16 ++++++++++++++++ .../core/dom/parser/c/GNUCSourceParser.java | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java index a08aa632b61..b76f0822338 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java @@ -3892,4 +3892,20 @@ public class AST2Tests extends AST2BaseTest { parse( buffer.toString(), ParserLanguage.C); assertTrue(System.currentTimeMillis()-time < 1000); } + + // int array[12]= {}; + public void testBug196468_emptyArrayInitializer() throws Exception { + StringBuffer buffer = getContents(1)[0]; + final String content = buffer.toString(); + parse( content, ParserLanguage.CPP, false); + parse( content, ParserLanguage.CPP, true); + parse( content, ParserLanguage.C, true); + try { + parse( content, ParserLanguage.C, false); + fail("C89 does not allow empty braces in array initializer"); + } + catch (ParserException e) { + } + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java index 18e6a46abc5..0285011f58c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java @@ -179,6 +179,14 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { consume(); IASTInitializerList result = createInitializerList(); ((ASTNode) result).setOffset(startingOffset); + + // bug 196468, gcc accepts empty braces. + if (supportGCCStyleDesignators && LT(1) == (IToken.tRBRACE)) { + int l = consume().getEndOffset(); + ((ASTNode) result).setLength(l - startingOffset); + return result; + } + for (;;) { int checkHashcode = LA(1).hashCode(); // required at least one initializer list