summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/cpp/tr-warn3.c
blob: 33517188cd8cf0acced4f3a8affd4c2ba61dba24 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/* Test for warnings about nontraditional directives inside the unused
   clauses of #if statements.  Extensions do _not_ receive pedantic
   warnings inside unused clauses because they are often hidden this
   way on purpose.  However they do still require indentation for K&R.  */
/* { dg-do preprocess } */
/* { dg-options "-pedantic -Wtraditional" } */

#if 1

/* Block 1: K+R directives should have the # indented to warn.  */

#define foo bar		/* { dg-bogus "indented" "^#kandr"     } */
# define foo bar	/* { dg-bogus "indented" "^# kandr"    } */
 #define foo bar	/* { dg-warning "indented" "^ #kandr"  } */
 # define foo bar	/* { dg-warning "indented" "^ # kandr" } */

/* Block 2: C89 directives should not have the # indented to warn.  */

#pragma whatever	/* { dg-warning "indented" "^#c89"     } */
# pragma whatever	/* { dg-warning "indented" "^# c89"    } */
 #pragma whatever	/* { dg-bogus "indented" "^ #c89"      } */
 # pragma whatever	/* { dg-bogus "indented" "^ # c89"     } */

/* Block 3: Extensions should not have the # indented to warn, _and_
   they should get a -pedantic warning. */

#assert foo(bar)	/* { dg-warning "indented" "^#ext"    } */
# assert bar(baz)	/* { dg-warning "indented" "^# ext"   } */
 #assert baz(quux)	/* { dg-bogus "indented" "^ #ext"     } */
 # assert quux(weeble)	/* { dg-bogus "indented" "^ # ext"    } */

#else

/* Block 1: K+R directives should have the # indented to warn.  */

#undef foo bar		/* { dg-bogus "indented" "^#kandr"     } */
# undef foo bar		/* { dg-bogus "indented" "^# kandr"    } */
 #undef foo bar		/* { dg-warning "indented" "^ #kandr"  } */
 # undef foo bar	/* { dg-warning "indented" "^ # kandr" } */

/* Block 2: C89 directives should not have the # indented to warn.  */

#error whatever		/* { dg-warning "indented" "^#c89"     } */
# error whatever	/* { dg-warning "indented" "^# c89"    } */
 #error whatever	/* { dg-bogus "indented" "^ #c89"      } */
 # error whatever	/* { dg-bogus "indented" "^ # c89"     } */

/* Block 3: Extensions should not have the # indented to warn, and
   they should _not_ get a -pedantic warning. */

#unassert foo(bar)		/* { dg-warning "indented" "^#ext"    } */
# unassert bar(baz)		/* { dg-warning "indented" "^# ext"   } */
 #unassert baz(quux)		/* { dg-bogus "indented" "^ #ext"     } */
 # unassert quux(weeble)	/* { dg-bogus "indented" "^ # ext"    } */

#endif

/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 27 } */
/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 28 } */
/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 29 } */
/* { dg-warning "GCC extension" "extension warning" { target *-*-* } 30 } */