Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.c-torture/execute/noinit-attribute.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 /* { dg-do run } */ | |
2 /* { dg-require-effective-target noinit } */ | |
3 /* { dg-options "-O2" } */ | |
4 | |
5 /* This test checks that noinit data is handled correctly. */ | |
6 | |
7 extern void _start (void) __attribute__ ((noreturn)); | |
8 extern void abort (void) __attribute__ ((noreturn)); | |
9 extern void exit (int) __attribute__ ((noreturn)); | |
10 | |
11 int var_common; | |
12 int var_zero = 0; | |
13 int var_one = 1; | |
14 int __attribute__((noinit)) var_noinit; | |
15 int var_init = 2; | |
16 | |
17 int __attribute__((noinit)) func(); /* { dg-warning "attribute only applies to variables" } */ | |
18 int __attribute__((section ("mysection"), noinit)) var_section1; /* { dg-warning "because it conflicts with attribute" } */ | |
19 int __attribute__((noinit, section ("mysection"))) var_section2; /* { dg-warning "because it conflicts with attribute" } */ | |
20 | |
21 | |
22 int | |
23 main (void) | |
24 { | |
25 /* Make sure that the C startup code has correctly initialized the ordinary variables. */ | |
26 if (var_common != 0) | |
27 abort (); | |
28 | |
29 /* Initialized variables are not re-initialized during startup, so | |
30 check their original values only during the first run of this | |
31 test. */ | |
32 if (var_init == 2) | |
33 if (var_zero != 0 || var_one != 1) | |
34 abort (); | |
35 | |
36 switch (var_init) | |
37 { | |
38 case 2: | |
39 /* First time through - change all the values. */ | |
40 var_common = var_zero = var_one = var_noinit = var_init = 3; | |
41 break; | |
42 | |
43 case 3: | |
44 /* Second time through - make sure that d has not been reset. */ | |
45 if (var_noinit != 3) | |
46 abort (); | |
47 exit (0); | |
48 | |
49 default: | |
50 /* Any other value for var_init is an error. */ | |
51 abort (); | |
52 } | |
53 | |
54 /* Simulate a processor reset by calling the C startup code. */ | |
55 _start (); | |
56 | |
57 /* Should never reach here. */ | |
58 abort (); | |
59 } |