New GCC takes 19x as long to compile my program (compared to old GCC), plus void** patch suggestion
Ian Lance Taylor
iant@google.com
Wed Aug 8 19:25:00 GMT 2012
On Wed, Aug 8, 2012 at 12:09 PM, Elmar Krieger <elmar@cmbi.ru.nl> wrote:
>> Not at all high. See Type-Based Alias Analysis
>> <http://www.drdobbs.com/cpp/type-based-alias-analysis/184404273>
>> for one reason.
>
> Thanks, I read the article, but didn't really see how forbidding a function
> with argument void** to accept a pointer to any pointer helps with aliasing.
>
> If it's perfectly normal that a function with argument void* accepts any
> pointer, then a function with argument void** should accept a pointer to any
> pointer by analogy, without having additional aliasing problems, no?
The C and C++ languages could work that way, yes. But they don't.
GCC attempts to implement the standard language.
Aliasing issues arise when a function has two pointers, and determine
whether an assignment to *p1 might change the value at *p2. There are
no aliasing issues with a void* pointer, because if p1 is void* then
*p1 is invalid. That is not true for a void** pointer, so aliasing
issues do arise. If p1 is void** and p2 is int**, then GCC will
assume that an assignment to *p1 does not change the value at *p2, as
the language standard states. It's easy to imagine that that could
break a program after inlining.
Ian
More information about the Gcc
mailing list