blob: 0a4b5822392d3d517536721b60e11aef8e853ac6 [file] [log] [blame]
Chris Lattner953b4b02009-02-04 02:17:09 +00001// RUN: clang -fsyntax-only -verify -pedantic %s &&
2// RUN: clang -E %s 2>&1 | grep 'blonk.c:92:2: error: #error ABC' &&
3// RUN: clang -E %s 2>&1 | grep 'blonk.c:93:2: error: #error DEF'
Chris Lattner359cc442009-01-26 05:29:08 +00004
5#line 'a' // expected-error {{#line directive requires a positive integer argument}}
6#line 0 // expected-error {{#line directive requires a positive integer argument}}
7#line 2147483648 // expected-warning {{C requires #line number to be less than 2147483648, allowed as extension}}
8#line 42 // ok
9#line 42 'a' // expected-error {{nvalid filename for #line directive}}
10#line 42 "foo/bar/baz.h" // ok
11
12
Chris Lattner8e60a292009-01-26 05:44:13 +000013// #line directives expand macros.
14#define A 42 "foo"
15#line A
16
Chris Lattner478a18e2009-01-26 06:19:46 +000017# 42
18# 42 "foo"
19# 42 "foo" 1 3
20# 42 "foo" 2 3
21# 42 "foo" 2 3 4
22# 42 "foo" 3 4
23
24# 'a' // expected-error {{invalid preprocessing directive}}
25# 42 'f' // expected-error {{invalid filename for line marker directive}}
26# 42 1 3 // expected-error {{invalid filename for line marker directive}}
27# 42 "foo" 3 1 // expected-error {{invalid flag line marker directive}}
28# 42 "foo" 42 // expected-error {{invalid flag line marker directive}}
29# 42 "foo" 1 2 // expected-error {{invalid flag line marker directive}}
Chris Lattner953b4b02009-02-04 02:17:09 +000030
31
32// These are checked by the RUN line.
33#line 92 "blonk.c"
34#error ABC // expected-error {{#error ABC}}
35#error DEF // expected-error {{#error DEF}}
36
Chris Lattner6b306672009-02-04 05:33:01 +000037
38// Verify that linemarker diddling of the system header flag works.
39
40# 192 "glomp.h" // not a system header.
41typedef int x; // expected-note {{previous definition is here}}
42typedef int x; // expected-error {{redefinition of 'x'}}
43
44# 192 "glomp.h" 3 // System header.
45typedef int y; // ok
46typedef int y; // ok
47
48#line 42 "blonk.h" // doesn't change system headerness.
49
50typedef int z; // ok
51typedef int z; // ok
52
53# 42 "blonk.h" // DOES change system headerness.
54
55typedef int w; // expected-note {{previous definition is here}}
56typedef int w; // expected-error {{redefinition of 'w'}}