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 7a2f18ffb50..b3c6b69fd7f 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 @@ -18,6 +18,7 @@ import junit.framework.TestSuite; import org.eclipse.cdt.core.dom.ast.ASTSignatureUtil; import org.eclipse.cdt.core.dom.ast.ASTTypeUtil; +import org.eclipse.cdt.core.dom.ast.EScopeKind; import org.eclipse.cdt.core.dom.ast.ExpansionOverlapsBoundaryException; import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator; import org.eclipse.cdt.core.dom.ast.IASTArraySubscriptExpression; @@ -7228,4 +7229,20 @@ public class AST2Tests extends AST2BaseTest { parseAndCheckBindings(code, ParserLanguage.C, true); parseAndCheckBindings(code, ParserLanguage.CPP, true); } + + // void test() { + // __builtin_va_list result; + // } + public void testLocalVariableOfTypeVaList_313270() throws Exception { + final String code = getAboveComment(); + BindingAssertionHelper bh= new BindingAssertionHelper(code, false); + IBinding var= bh.assertNonProblem("result", 0); + assertInstance(var, IVariable.class); + assertTrue(var.getScope().getKind() == EScopeKind.eLocal); + + bh= new BindingAssertionHelper(code, true); + var= bh.assertNonProblem("result", 0); + assertInstance(var, IVariable.class); + assertTrue(var.getScope().getKind() == EScopeKind.eLocal); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java index a13012b0b62..a284afe48ad 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java @@ -15,12 +15,12 @@ package org.eclipse.cdt.internal.core.dom.parser; import org.eclipse.cdt.core.dom.ast.ASTNodeProperty; import org.eclipse.cdt.core.dom.ast.IBasicType; +import org.eclipse.cdt.core.dom.ast.IBasicType.Kind; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IFunctionType; import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.IBasicType.Kind; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameter; import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider; @@ -246,7 +246,7 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider { static final private IType c_unsigned_int; static final private IType c_unsigned_long; static final private IType c_unsigned_long_long; - static final private IFunctionType c_va_list; + static final private IType c_va_list; static final private IType c_void; static final private IType c_void_p; static final private IType c_void_p_r; @@ -277,7 +277,7 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider { static final private IType cpp_unsigned_int; static final private IType cpp_unsigned_long; static final private IType cpp_unsigned_long_long; - static final private IFunctionType cpp_va_list; + static final private IType cpp_va_list; static final private IType cpp_void; static final private IType cpp_void_p; static final private IType cpp_void_p_r; @@ -309,7 +309,7 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider { c_unsigned_long = new CBasicType(Kind.eInt, IBasicType.IS_LONG | IBasicType.IS_UNSIGNED); c_unsigned_long_long = new CBasicType(Kind.eInt, IBasicType.IS_LONG_LONG | IBasicType.IS_UNSIGNED); - c_va_list = new CFunctionType(c_char_p, new IType[0]); // assumed: char* va_list(); + c_va_list = new CPointerType(new CFunctionType(c_char_p, new IType[0]), 0); // assumed: char* va_list(); c_size_t = c_unsigned_long; // assumed unsigned long int c_void = new CBasicType(Kind.eVoid, 0); @@ -346,7 +346,7 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider { cpp_unsigned_long_long = new CPPBasicType(Kind.eInt, IBasicType.IS_UNSIGNED | IBasicType.IS_LONG_LONG, null); cpp_size_t = cpp_unsigned_long; // assumed unsigned long int - cpp_va_list = new CPPFunctionType(cpp_char_p, new IType[0]); // assumed: char* va_list(); + cpp_va_list = new CPPPointerType(new CPPFunctionType(cpp_char_p, new IType[0])); // assumed: char* va_list(); cpp_void = new CPPBasicType(Kind.eVoid, 0); cpp_void_p = new CPPPointerType(cpp_void);