From 098117e25d815c6e56c6de4a9fc112b041405109 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 9 May 2007 08:35:53 +0000 Subject: [PATCH] Fix and test-case for 182464, NPE in name resolution for plain C. --- .../cdt/core/parser/tests/ast2/AST2Tests.java | 12 +++++++++++- .../cdt/internal/core/dom/parser/c/CScope.java | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) 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 2ce460efca6..d38bb54d470 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 @@ -153,7 +153,11 @@ public class AST2Tests extends AST2BaseTest { } protected IASTTranslationUnit parseAndCheckBindings( String code, ParserLanguage lang ) throws Exception { - IASTTranslationUnit tu = parse( code, lang ); + return parseAndCheckBindings(code, lang, false); + } + + protected IASTTranslationUnit parseAndCheckBindings( String code, ParserLanguage lang, boolean useGnuExtensions) throws Exception { + IASTTranslationUnit tu = parse( code, lang, useGnuExtensions ); CNameCollector col = new CNameCollector(); tu.accept(col); assertNoProblemBindings( col ); @@ -3679,4 +3683,10 @@ public class AST2Tests extends AST2BaseTest { } + // int __builtin_sin; + public void testBug182464() throws Exception { + StringBuffer buffer = getContents(1)[0]; + for (int i = 0; i < LANGUAGES.length; i++) + parseAndCheckBindings( buffer.toString(), LANGUAGES[i], true); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CScope.java index cc143b6e8ad..d8d4247805f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CScope.java @@ -151,8 +151,8 @@ public class CScope implements ICScope, IASTInternalScope { bindings[type] = new CharArrayObjectMap(1); char [] n = name.toCharArray(); - IASTName current = (IASTName) bindings[type].get( n ); - if( current == null || ((CASTName)current).getOffset() > ((CASTName) name).getOffset() ){ + Object current= bindings[type].get( n ); + if( !(current instanceof IASTName) || ((CASTName)current).getOffset() > ((CASTName) name).getOffset() ){ bindings[type].put( n, name ); } }