[cfe-dev] Function pointers in structs in arrays codegen assert
Chris Lattner
clattner at apple.com
Tue Dec 11 20:56:05 PST 2007
On Dec 11, 2007, at 8:53 PM, Oliver Hunt wrote:
> Yeah the ILE with type void screws with compound initialisers -- eg
> struct of structs, array of structs, etc.
> Broadly speaking the global struct initialiser logic (at least)
> should be able to handle these once the ILE
> has the correct type.
> Unfortunately that doesn't resolve the problem that C apparently
> allows the ILE's for initialising arrays of
> structs, etc to be flattened. eg.
> struct S {int a; int b;}
> struct S foo[] = {{1,2}, {3,4}};
> struct S bar[] = {1, 2, 3, 4};
>
> foo and bar are both valid -- the initialiser logic will hork itself
> in that case.
Sema should produce an AST that is the same for both of those cases:
in the 'bar' case, it should synthesize two initlistexprs of the right
type.
-Chris
>
> --Oliver
>
> On 11/12/2007, at 8:41 PM, Chris Lattner wrote:
>
>>
>> On Dec 10, 2007, at 6:51 PM, Keith Bauer wrote:
>>
>>> It's fine for function pointers in global arrays, and function
>>> pointers in global structs, just not the combination...
>>>
>>> CookieJar:Desktop keith$ clang -emit-llvm fptrinit.c
>>> Assertion failed: (ILE->getType()->isArrayType() ||
>>> ILE->getType()->isStructureType()), function GenerateAggregateInit,
>>> file CodeGenModule.cpp, line 283.
>>
>> This looks like a sema bug. The init list expr is getting type
>> "void", which is clearly wrong :)
>>
>> typedef void (* F)(void);
>> extern void foo(void);
>>
>> struct S { F f; };
>> void bar() {
>> struct S a[1] = { { foo } };
>> }
>>
>> void bar()
>> (CompoundStmt 0x8061c0 <t.c:5:12, line:7:1>
>> (DeclStmt 0x8061b0 <:0:0>
>> 0x806100 "struct S a[1] =
>> (InitListExpr 0x806180 <t.c:6:19, col:29> 'struct S [1]'
>> (InitListExpr 0x806150 <col:21, col:27> 'void'
>> (DeclRefExpr 0x806130 <col:23> 'void (void)'
>> FunctionDecl='foo' 0x806020)))"
>>
>> Steve, please take a look. Incidentally, it looks like the
>> sourcerange on the declstmt is wrong.
>>
>> -Chris
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
More information about the cfe-dev
mailing list