https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #25 from Mikael Pettersson ---
So, is there a way to under-allocate a union (just allocate enough for the
member you want) and access it via the union pointer that is valid C?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #24 from joseph at codesourcery dot com ---
On Mon, 27 Oct 2014, terra at gnome dot org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
>
> --- Comment #22 from M Welinder ---
> >Given
> >
> > GnmExprBinary res;
> > G
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #23 from joseph at codesourcery dot com ---
On Mon, 27 Oct 2014, jakub at gcc dot gnu.org wrote:
> Let's consider if in #c11 you change:
> GnmExprBinary *res = malloc (sizeof (GnmExprBinary));
> res->oper = op;
> return (GnmExp
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #22 from M Welinder ---
>Given
>
> GnmExprBinary res;
> GnmExpr const *expr = (GnmExpr *)&res;
>
>the C standard does not define where the result of the conversion points;
How do you read C99's Section 6.5 #7, then?
Doesn't that
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #21 from Andreas Schwab ---
This is only valid if the object is of the union type (union _GnmExpr)
(ยง6.5.2.3#6: "if the union object currently contains one of these structures").
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #20 from Jakub Jelinek ---
(In reply to jos...@codesourcery.com from comment #19)
> Given
>
> GnmExprBinary res;
> GnmExpr const *expr = (GnmExpr *)&res;
Let's consider if in #c11 you change:
GnmExprBinary *res = malloc (sizeo
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #19 from joseph at codesourcery dot com ---
Given
GnmExprBinary res;
GnmExpr const *expr = (GnmExpr *)&res;
the C standard does not define where the result of the conversion points;
all that's defined is that if converted direc
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #18 from M Welinder ---
The example at strict-aliasing in the gcc man page covers a different
situation: you don't get to access a double via an int.
I get it.
But the standard says that in certain circumstances you really do get
to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #17 from M Welinder ---
You keep saying "undefined behaviour", but you keep avoiding
substantiating that claim.
Where, in the C99 standard, is the clause that makes things undefined?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #16 from Markus Trippelsdorf ---
(In reply to M Welinder from comment #14)
> > 2) In the if statement, where you probe the different members, you
> > also invoke undefined behavior.
>
> Absolutely not! I went other that in painful d
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #15 from M Welinder ---
FYI, I filed a related bug for valgrind covering the problem with the
conditional jump being detected as undefined:
https://bugs.kde.org/show_bug.cgi?id=340392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #14 from M Welinder ---
> 1) Your malloc is too small. It has to be sizeof (biggest member).
> So you're invoking undefined behavior.
Can you produce a specific authoritative reference for that statement?
I.e., a reference to the sta
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
Jakub Jelinek changed:
What|Removed |Added
CC||jakub at gcc dot gnu.org,
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #12 from Markus Trippelsdorf ---
1) Your malloc is too small. It has to be sizeof (biggest member).
So you're invoking undefined behavior.
2) In the if statement, where you probe the different members, you
also invoke undefined behav
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
M Welinder changed:
What|Removed |Added
Attachment #33809|0 |1
is obsolete|
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #10 from Mikael Pettersson ---
I now think the test case is invalid. There is special provision in the
standard for accessing "the wrong member" of a union, but the member has to be
a struct type which shares a prefix with the curren
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #9 from Mikael Pettersson ---
Can you tweak the testcase into something that throws an actual runtime error
(by faulting or returning 1 from main or doing exit(1)) instead of relying on
valgrind (which I don't trust) to spot a/the pro
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #8 from M Welinder ---
> That is a different issue. You access expr->func.argc and expr->func.func
> in your if expression. And of course they are uninitialised.
No, I don't. You see, C has this feature for the && operator that i
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
Markus Trippelsdorf changed:
What|Removed |Added
Status|UNCONFIRMED |RESOLVED
Resolution|---
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #6 from Andrew Pinski ---
This:
expr->oper == GNM_EXPR_OP_FUNCALL &&
expr->func.argc == 1
is being combined into:
D.2319_2 = BIT_FIELD_REF <*expr_1, 64, 0>;
D.2320_3 = D.2319_2 & 18446744069414584575;
D.2320_3 == 4294967
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
M Welinder changed:
What|Removed |Added
Status|RESOLVED|UNCONFIRMED
Resolution|INVALID
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
Markus Trippelsdorf changed:
What|Removed |Added
Status|UNCONFIRMED |RESOLVED
CC|
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #3 from M Welinder ---
Why do you think so?
I think it is covered by this:
6.5 Expressions
[...]
[#7] An object shall have its stored value accessed only by
an lvalue expression that has one of the following types:63
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #2 from Andrew Pinski ---
I think this code violates C/C++ aliasing rules.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63645
--- Comment #1 from M Welinder ---
Created attachment 33810
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33810&action=edit
Preprocessed version of the program
25 matches
Mail list logo