1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-05 16:56:04 +02:00

Bug 313270: Local variables of type va_arg.

This commit is contained in:
Markus Schorn 2010-05-26 08:15:34 +00:00
parent 037bcc12e9
commit 9381be7ba2
2 changed files with 22 additions and 5 deletions

View file

@ -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);
}
}

View file

@ -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);