gcc_attribute_var.c revision 1.13
11.13Srillig/* $NetBSD: gcc_attribute_var.c,v 1.13 2024/09/28 15:51:40 rillig Exp $ */ 21.1Srillig# 3 "gcc_attribute_var.c" 31.1Srillig 41.1Srillig/* 51.1Srillig * Tests for the GCC __attribute__ for variables. 61.1Srillig * 71.1Srillig * https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html 81.1Srillig */ 91.1Srillig 101.8Srillig/* lint1-extra-flags: -X 351 */ 111.8Srillig 121.1Srilligvoid 131.1Srilligwrite_to_page(unsigned index, char ch) 141.1Srillig{ 151.1Srillig static char page[4096] 161.1Srillig __attribute__((__aligned__(4096))); 171.1Srillig 181.1Srillig page[index] = ch; 191.1Srillig} 201.1Srillig 211.1Srilligvoid 221.1Srilligplacement( 231.1Srillig __attribute__((__deprecated__)) int before, 241.1Srillig int __attribute__((__deprecated__)) between, 251.1Srillig int after __attribute__((__deprecated__)) 261.1Srillig); 271.1Srillig 281.2Srilligvoid println(void); 291.2Srillig 301.2Srillig/* 311.2Srillig * A GCC extension allows statement of the form __attribute__((fallthrough)), 321.13Srillig * therefore, to avoid shift/reduce conflicts in the grammar, the attributes 331.13Srillig * cannot be part of the declaration specifiers between begin_type/end_type. 341.2Srillig */ 351.2Srilligvoid 361.2Srilligambiguity_for_attribute(void) 371.2Srillig{ 381.2Srillig __attribute__((unused)) _Bool var1; 391.2Srillig 401.2Srillig switch (1) { 411.2Srillig case 1: 421.2Srillig println(); 431.2Srillig __attribute__((unused)) _Bool var2; 441.2Srillig __attribute__((fallthrough)); 451.2Srillig case 2: 461.2Srillig println(); 471.2Srillig } 481.2Srillig} 491.2Srillig 501.4Srilligvoid 511.4Srilligattribute_after_array_brackets( 521.4Srillig const char *argv[] __attribute__((__unused__)) 531.4Srillig) 541.4Srillig{ 551.4Srillig} 561.10Srillig 571.10Srilligstruct attribute_in_member_declaration { 581.10Srillig int __attribute__(()) 591.10Srillig x __attribute__(()), 601.10Srillig y __attribute__(()); 611.10Srillig 621.10Srillig unsigned int __attribute__(()) 631.10Srillig bit1:1 __attribute__(()), 641.10Srillig bit2:2 __attribute__(()), 651.10Srillig bit3:3 __attribute__(()); 661.10Srillig}; 671.12Srillig 681.12Srillig 691.12Srilligvoid 701.12Srilliganonymous_members(void) 711.12Srillig{ 721.12Srillig struct single_attribute_outer { 731.12Srillig struct single_attribute_inner { 741.12Srillig int member; 751.12Srillig } __attribute__(()); 761.12Srillig } __attribute__(()); 771.12Srillig 781.12Srillig struct multiple_attributes_outer { 791.12Srillig struct multiple_attributes_inner { 801.12Srillig int member; 811.12Srillig } __attribute__(()) __attribute__(()); 821.12Srillig } __attribute__(()) __attribute__(()); 831.12Srillig} 84