Scanning the Internet for External Cloud Exposures via SSL Certs
Distro Recipes 2013: What’s new in gcc 4.8?
1. GCC 4.8, State of the Onion
Dodji Seketeli <dodji@redhat.com>
Distro Recipes Conference - April 2013 - Paris, France
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 1/23
2. Breakup of the talk
GCC Development Plan
Significant Changes in 4.8
Diagnostic
Language support
Optimizations and Middle End
Processors
Architecture Change
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 2/23
3. GCC Development Plan
GCC Development Plan
Significant Changes in 4.8
Diagnostic
Language support
Optimizations and Middle End
Processors
Architecture Change
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 3/23
4. GCC Development Plan
2 phases in the development time line of GCC
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 4/23
5. GCC Development Plan
2 phases in the development time line of GCC
Phase 1: New features; at least 6 months
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 4/23
6. GCC Development Plan
2 phases in the development time line of GCC
Phase 1: New features; at least 6 months
Phase 2: Stabilization; the time it takes.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 4/23
7. GCC Development Plan
2 phases in the development time line of GCC
Phase 1: New features; at least 6 months
Phase 2: Stabilization; the time it takes.
GCC 4.7 released in March 2012
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 4/23
8. GCC Development Plan
2 phases in the development time line of GCC
Phase 1: New features; at least 6 months
Phase 2: Stabilization; the time it takes.
GCC 4.7 released in March 2012
GCC 4.8 released in March 2013
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 4/23
9. Diagnostics changes
GCC Development Plan
Significant Changes in 4.8
Diagnostic
Language support
Optimizations and Middle End
Processors
Architecture Change
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 5/23
10. -fdiagnostics-show-caret Option
Displays source code in diagnostic messages
t.cc:4:19: fatal error: foo: No such file or directory
#include <foo>
^
compilation terminated.
This option is on by default in in 4.8!
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 6/23
11. -Wsizeof-pointer-memaccess Option
Warns about the suspicious use of memory access function of the
C library, like in:
memset (ptr, 0, sizeof (ptr));
This option is turned on by -Wall
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 7/23
12. -ftrack-macro-location Option
First appeared in 4.7 as an unstable tech preview.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 8/23
13. -ftrack-macro-location Option
First appeared in 4.7 as an unstable tech preview.
Ironed out, stabilized and set by default in 4.8
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 8/23
14. -ftrack-macro-location Option
Once upon a time, an error in the expansion of a macro was pain
(in the bottom of the back) to diagnose:
============> test.c <==============
1 #define SHIFT(OP0, OP1)
2 OP0 << OP1
3
4 int
5 main ()
6 {
7 return SHIFT (1, 1.1);
8 }
==========================
===============> Error Diagnostics <=============
test.c: In function ’int main()’:
test.c:7:10: error: invalid operands of types ’int’ and ’double’ to binary ’operator<<’
===============================================
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 9/23
15. Option -ftrack-macro-location
Now, with this option, combined with -fdiagnostics-show-caret our
back is relieved:
============> test.c <==============
1 #define SHIFT(OP0, OP1)
2 OP0 << OP1
3
4 int
5 main ()
6 {
7 return SHIFT (1, 1.1);
8 }
==========================
==========> Ce que le compilateur nous dira maintenant <========
test.c: In function ’main’:
test.c:2:6: error: invalid operands to binary << (have ’int’ and ’double’)
OP0 << OP1
^
test.c:7:10: note: in expansion of macro ’SHIFT’
return SHIFT (1, 1.1);
^
=================================================
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 10/23
16. Changes in langage support
GCC Development Plan
Significant Changes in 4.8
Diagnostic
Language support
Optimizations and Middle End
Processors
Architecture Change
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 11/23
17. C++11
New version 7 of ABI introduced. But for now, version 2 of
the ABI remains the default.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 12/23
18. C++11
New version 7 of ABI introduced. But for now, version 2 of
the ABI remains the default.
Better support for the memory model of C++11.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 12/23
19. C++11
New version 7 of ABI introduced. But for now, version 2 of
the ABI remains the default.
Better support for the memory model of C++11.
Support of C++11 atomic operators.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 12/23
20. C++11
New version 7 of ABI introduced. But for now, version 2 of
the ABI remains the default.
Better support for the memory model of C++11.
Support of C++11 atomic operators.
Thread variable - key word thread local
thread_local int i;
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 12/23
21. C++11
New version 7 of ABI introduced. But for now, version 2 of
the ABI remains the default.
Better support for the memory model of C++11.
Support of C++11 atomic operators.
Thread variable - key word thread local
thread_local int i;
Generalized attributes
struct [[gnu::packed]] a_type_of_5_bytes
{
char premier;
int second;
};
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 12/23
22. C++11
Alignment Expressions;
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 13/23
23. C++11
Alignment Expressions;
struct alignas (a_type_of_5_bytes) another_type
{
char c;
int i;
};
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 13/23
24. C++11
Inherited Constructors
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 14/23
25. C++11
Inherited Constructors
struct A
{
A(int);
A(const char*);
};
struct B : public A
{
using A::A; // <-- all constructors of B are generated here
};
B b0("coucou"); // OK
B b1(10); // OK, too.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 14/23
26. Other languages
Support of Fortran and Go was greatly improved too.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 15/23
27. Optimizations and Middle End changes
GCC Development Plan
Significant Changes in 4.8
Diagnostic
Language support
Optimizations and Middle End
Processors
Architecture Change
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 16/23
28. General optimizer improvements
DWARF 4 is now default debug info format. GDB 7.5,
Valgrind 3.8.0 and elfutils 0.154 were updated accordingly.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 17/23
29. General optimizer improvements
DWARF 4 is now default debug info format. GDB 7.5,
Valgrind 3.8.0 and elfutils 0.154 were updated accordingly.
New -Og : faster compilation, good debugging experience,
reasonable speed. Better than -0O.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 17/23
30. General optimizer improvements
DWARF 4 is now default debug info format. GDB 7.5,
Valgrind 3.8.0 and elfutils 0.154 were updated accordingly.
New -Og : faster compilation, good debugging experience,
reasonable speed. Better than -0O.
Better scalability on very big functions.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 17/23
31. General optimizer improvements
DWARF 4 is now default debug info format. GDB 7.5,
Valgrind 3.8.0 and elfutils 0.154 were updated accordingly.
New -Og : faster compilation, good debugging experience,
reasonable speed. Better than -0O.
Better scalability on very big functions.
Better LTO support.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 17/23
32. General optimizer improvements
DWARF 4 is now default debug info format. GDB 7.5,
Valgrind 3.8.0 and elfutils 0.154 were updated accordingly.
New -Og : faster compilation, good debugging experience,
reasonable speed. Better than -0O.
Better scalability on very big functions.
Better LTO support.
Address Sanitizer: New fast memory error detector on intel
and ppc GNU/Linux and intel/Darwin. -fsanitize=address.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 17/23
33. General optimizer improvements
DWARF 4 is now default debug info format. GDB 7.5,
Valgrind 3.8.0 and elfutils 0.154 were updated accordingly.
New -Og : faster compilation, good debugging experience,
reasonable speed. Better than -0O.
Better scalability on very big functions.
Better LTO support.
Address Sanitizer: New fast memory error detector on intel
and ppc GNU/Linux and intel/Darwin. -fsanitize=address.
Thread Sanitizer: Data race memory error detector, on x86-64
GNU/Linux. -fsanitize=thread.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 17/23
34. processor support
GCC Development Plan
Significant Changes in 4.8
Diagnostic
Language support
Optimizations and Middle End
Processors
Architecture Change
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 18/23
35. CPUs support
AArch64, aka ARM 64. Just added for Cortex-A53 and
Cortex-A57 processors -mcpu=cortex-a53 and
-mcpu=cortex-a57.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 19/23
36. CPUs support
AArch64, aka ARM 64. Just added for Cortex-A53 and
Cortex-A57 processors -mcpu=cortex-a53 and
-mcpu=cortex-a57.
Better code generation for several existing ARM chips,
including better auto-vectorization.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 19/23
37. CPUs support
AArch64, aka ARM 64. Just added for Cortex-A53 and
Cortex-A57 processors -mcpu=cortex-a53 and
-mcpu=cortex-a57.
Better code generation for several existing ARM chips,
including better auto-vectorization.
Better support for AVR
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 19/23
38. CPUs support
AArch64, aka ARM 64. Just added for Cortex-A53 and
Cortex-A57 processors -mcpu=cortex-a53 and
-mcpu=cortex-a57.
Better code generation for several existing ARM chips,
including better auto-vectorization.
Better support for AVR
In x86 land
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 19/23
39. CPUs support
AArch64, aka ARM 64. Just added for Cortex-A53 and
Cortex-A57 processors -mcpu=cortex-a53 and
-mcpu=cortex-a57.
Better code generation for several existing ARM chips,
including better auto-vectorization.
Better support for AVR
In x86 land
Support for new Broadwell architecture.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 19/23
40. CPUs support
AArch64, aka ARM 64. Just added for Cortex-A53 and
Cortex-A57 processors -mcpu=cortex-a53 and
-mcpu=cortex-a57.
Better code generation for several existing ARM chips,
including better auto-vectorization.
Better support for AVR
In x86 land
Support for new Broadwell architecture.
New built-in functions to detect CPU type at runtime:
builtin cpu is(”westmere”); and
builtin cpu supports(”sse”);
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 19/23
41. x86 CPU Support, continued
Function Multi-versioning in G++: Create multiple versions of
a function, each one targeting a specific processor or ISA.
Example:
__attribute__ ((target ("default")))
int foo(void)
{
return 1;
}
__attribute__ ((target ("sse4.2")))
int foo(void)
{
return 2;
}
int main (void)
{
int (*p) = &foo;
assert ((*p)() == foo());
return 0;
}
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 20/23
42. x86 CPU Support, continued
Function Multi-versioning in G++: Create multiple versions of
a function, each one targeting a specific processor or ISA.
Example:
__attribute__ ((target ("default")))
int foo(void)
{
return 1;
}
__attribute__ ((target ("sse4.2")))
int foo(void)
{
return 2;
}
int main (void)
{
int (*p) = &foo;
assert ((*p)() == foo());
return 0;
}
AMD Steamroller and Jaguar Core. -march=bdver3 and
-march=btver2.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 20/23
43. Architecture Change
GCC Development Plan
Significant Changes in 4.8
Diagnostic
Language support
Optimizations and Middle End
Processors
Architecture Change
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 21/23
44. Architecture Changes
GCC is now implemented in C++03.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 22/23
45. Architecture Changes
GCC is now implemented in C++03.
This allows:
Doing the language change progressively. Now one could ever
re-write those millions lines of code out there overnight.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 22/23
46. Architecture Changes
GCC is now implemented in C++03.
This allows:
Doing the language change progressively. Now one could ever
re-write those millions lines of code out there overnight.
Get better abstraction in a easier manner.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 22/23
47. Architecture Changes
GCC is now implemented in C++03.
This allows:
Doing the language change progressively. Now one could ever
re-write those millions lines of code out there overnight.
Get better abstraction in a easier manner.
Strong typing implies more errors detected at compile time.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 22/23
48. Architecture Changes
GCC is now implemented in C++03.
This allows:
Doing the language change progressively. Now one could ever
re-write those millions lines of code out there overnight.
Get better abstraction in a easier manner.
Strong typing implies more errors detected at compile time.
And compile time of the compiler didn’t increase! Quite the
opposite.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 22/23
49. Architecture Changes
GCC is now implemented in C++03.
This allows:
Doing the language change progressively. Now one could ever
re-write those millions lines of code out there overnight.
Get better abstraction in a easier manner.
Strong typing implies more errors detected at compile time.
And compile time of the compiler didn’t increase! Quite the
opposite.
A subset of C++ was chose, to avoid the Oil Refinery syndrome.
Code review is still the better quality insurance tool.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 22/23
50. Merci !
http://gcc.gnu.org - Drink the Cool Aid.
http://gcc.gnu.org/git - Code source repository
git clone git://gcc.gnu.org/git/gcc.git - git the sources!
http://news.gmane.org/gmane.comp.gcc.devel - Trolling, err,
discussions, sorry.
http://gcc.gnu.org/contribute.html - How to contribute. Yes, you!
gcc-patches@gcc.gnu.org - Where to send patches. Yes, you again.
Dodji Seketeli <dodji@redhat.com> GCC 4.8, State of the Onion 23/23