1176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -std=c99 -fsyntax-only -verify -pedantic %s 296e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -E %s 2>&1 | grep 'blonk.c:92:2: error: ABC' 396e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -E %s 2>&1 | grep 'blonk.c:93:2: error: DEF' 4359cc4475487ea0a660b3e8918334a2866e71c66Chris Lattner 5359cc4475487ea0a660b3e8918334a2866e71c66Chris Lattner#line 'a' // expected-error {{#line directive requires a positive integer argument}} 6540f9ae1023bba27052c742cd92d0b32361b28ebFariborz Jahanian#line 0 // expected-warning {{#line directive with zero argument is a GNU extension}} 7540f9ae1023bba27052c742cd92d0b32361b28ebFariborz Jahanian#line 00 // expected-warning {{#line directive with zero argument is a GNU extension}} 8359cc4475487ea0a660b3e8918334a2866e71c66Chris Lattner#line 2147483648 // expected-warning {{C requires #line number to be less than 2147483648, allowed as extension}} 9359cc4475487ea0a660b3e8918334a2866e71c66Chris Lattner#line 42 // ok 10137b6a6149c53dbbcb8fba98e524d9ad0f3c8736Chris Lattner#line 42 'a' // expected-error {{invalid filename for #line directive}} 11359cc4475487ea0a660b3e8918334a2866e71c66Chris Lattner#line 42 "foo/bar/baz.h" // ok 12359cc4475487ea0a660b3e8918334a2866e71c66Chris Lattner 13359cc4475487ea0a660b3e8918334a2866e71c66Chris Lattner 148e60a29e25c9418522a072c7b959485f3c7bb2ecChris Lattner// #line directives expand macros. 158e60a29e25c9418522a072c7b959485f3c7bb2ecChris Lattner#define A 42 "foo" 168e60a29e25c9418522a072c7b959485f3c7bb2ecChris Lattner#line A 178e60a29e25c9418522a072c7b959485f3c7bb2ecChris Lattner 18478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner# 42 19478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner# 42 "foo" 20137b6a6149c53dbbcb8fba98e524d9ad0f3c8736Chris Lattner# 42 "foo" 2 // expected-error {{invalid line marker flag '2': cannot pop empty include stack}} 21137b6a6149c53dbbcb8fba98e524d9ad0f3c8736Chris Lattner# 42 "foo" 1 3 // enter 22137b6a6149c53dbbcb8fba98e524d9ad0f3c8736Chris Lattner# 42 "foo" 2 3 // exit 23137b6a6149c53dbbcb8fba98e524d9ad0f3c8736Chris Lattner# 42 "foo" 2 3 4 // expected-error {{invalid line marker flag '2': cannot pop empty include stack}} 24478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner# 42 "foo" 3 4 25478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner 26478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner# 'a' // expected-error {{invalid preprocessing directive}} 27478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner# 42 'f' // expected-error {{invalid filename for line marker directive}} 28478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner# 42 1 3 // expected-error {{invalid filename for line marker directive}} 29478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner# 42 "foo" 3 1 // expected-error {{invalid flag line marker directive}} 30478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner# 42 "foo" 42 // expected-error {{invalid flag line marker directive}} 31478a18ec47fdb7e0e580a2635648456e9db9ad4fChris Lattner# 42 "foo" 1 2 // expected-error {{invalid flag line marker directive}} 32ec27608da7f15b265135f5743fe71da1f8e25ee9Michael Ilseman# 42a33 // expected-error {{GNU line marker directive requires a simple digit sequence}} 33953b4b0950cb074156d66b45e8dab26725d4bccbChris Lattner 34953b4b0950cb074156d66b45e8dab26725d4bccbChris Lattner// These are checked by the RUN line. 35953b4b0950cb074156d66b45e8dab26725d4bccbChris Lattner#line 92 "blonk.c" 3678541c433049322b27b4f437973076ba29cff709Jordan Rose#error ABC 3778541c433049322b27b4f437973076ba29cff709Jordan Rose#error DEF 3878541c433049322b27b4f437973076ba29cff709Jordan Rose// expected-error@-2 {{ABC}} 3978541c433049322b27b4f437973076ba29cff709Jordan Rose#line 150 4078541c433049322b27b4f437973076ba29cff709Jordan Rose// expected-error@-3 {{DEF}} 41953b4b0950cb074156d66b45e8dab26725d4bccbChris Lattner 426b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner 436b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner// Verify that linemarker diddling of the system header flag works. 446b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner 456b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner# 192 "glomp.h" // not a system header. 466b3066780bda02e3117d71a18ca2f430ed1454afChris Lattnertypedef int x; // expected-note {{previous definition is here}} 47c0004df84fca9225b66a50adc66cf21c34298227Douglas Gregortypedef int x; // expected-warning {{redefinition of typedef 'x' is a C11 feature}} 486b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner 496b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner# 192 "glomp.h" 3 // System header. 506b3066780bda02e3117d71a18ca2f430ed1454afChris Lattnertypedef int y; // ok 516b3066780bda02e3117d71a18ca2f430ed1454afChris Lattnertypedef int y; // ok 526b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner 53d0359af5113c1936ff3f699c7d700adff59351f2Chris Lattnertypedef int q; // q is in system header. 54d0359af5113c1936ff3f699c7d700adff59351f2Chris Lattner 556b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner#line 42 "blonk.h" // doesn't change system headerness. 566b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner 576b3066780bda02e3117d71a18ca2f430ed1454afChris Lattnertypedef int z; // ok 586b3066780bda02e3117d71a18ca2f430ed1454afChris Lattnertypedef int z; // ok 596b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner 60bd16209c76e122d50b23af7f65067670946953d8Chris Lattner# 97 // doesn't change system headerness. 61bd16209c76e122d50b23af7f65067670946953d8Chris Lattner 62bd16209c76e122d50b23af7f65067670946953d8Chris Lattnertypedef int z1; // ok 63bd16209c76e122d50b23af7f65067670946953d8Chris Lattnertypedef int z1; // ok 64bd16209c76e122d50b23af7f65067670946953d8Chris Lattner 656b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner# 42 "blonk.h" // DOES change system headerness. 666b3066780bda02e3117d71a18ca2f430ed1454afChris Lattner 676b3066780bda02e3117d71a18ca2f430ed1454afChris Lattnertypedef int w; // expected-note {{previous definition is here}} 68c0004df84fca9225b66a50adc66cf21c34298227Douglas Gregortypedef int w; // expected-warning {{redefinition of typedef 'w' is a C11 feature}} 69ab82f41b217ce588a9456c0b4411f219d3ed0df8Chris Lattner 70d0359af5113c1936ff3f699c7d700adff59351f2Chris Lattnertypedef int q; // original definition in system header, should not diagnose. 71ab82f41b217ce588a9456c0b4411f219d3ed0df8Chris Lattner 72ab82f41b217ce588a9456c0b4411f219d3ed0df8Chris Lattner// This should not produce an "extra tokens at end of #line directive" warning, 73ab82f41b217ce588a9456c0b4411f219d3ed0df8Chris Lattner// because #line is allowed to contain expanded tokens. 74ab82f41b217ce588a9456c0b4411f219d3ed0df8Chris Lattner#define EMPTY() 75ab82f41b217ce588a9456c0b4411f219d3ed0df8Chris Lattner#line 2 "foo.c" EMPTY( ) 76ab82f41b217ce588a9456c0b4411f219d3ed0df8Chris Lattner#line 2 "foo.c" NONEMPTY( ) // expected-warning{{extra tokens at end of #line directive}} 77ab82f41b217ce588a9456c0b4411f219d3ed0df8Chris Lattner 7858e91d57510a5ce4fd424fe7fd1cdfa86701ef35Chris Lattner// PR3940 79dc8c90da158030c0d0c62539e2da0adccc09f271Chris Lattner#line 0xf // expected-error {{#line directive requires a simple digit sequence}} 80dc8c90da158030c0d0c62539e2da0adccc09f271Chris Lattner#line 42U // expected-error {{#line directive requires a simple digit sequence}} 81bc81682756a2406e1788b14c576b3c8b515d97a3Chris Lattner 82bc81682756a2406e1788b14c576b3c8b515d97a3Chris Lattner 83dc8c90da158030c0d0c62539e2da0adccc09f271Chris Lattner// Line markers are digit strings interpreted as decimal numbers, this is 84dc8c90da158030c0d0c62539e2da0adccc09f271Chris Lattner// 10, not 8. 85dc8c90da158030c0d0c62539e2da0adccc09f271Chris Lattner#line 010 // expected-warning {{#line directive interprets number as decimal, not octal}} 86dc8c90da158030c0d0c62539e2da0adccc09f271Chris Lattnerextern int array[__LINE__ == 10 ? 1:-1]; 87dc8c90da158030c0d0c62539e2da0adccc09f271Chris Lattner 8860c99d34cf28c002718b61c2f058d1e84923a634Michael Ilseman# 020 // expected-warning {{GNU line marker directive interprets number as decimal, not octal}} 8960c99d34cf28c002718b61c2f058d1e84923a634Michael Ilsemanextern int array_gnuline[__LINE__ == 20 ? 1:-1]; 9060c99d34cf28c002718b61c2f058d1e84923a634Michael Ilseman 91dff070fb0f2880806ef1ae5471ace37a97dd9e6aChris Lattner/* PR3917 */ 92dff070fb0f2880806ef1ae5471ace37a97dd9e6aChris Lattner#line 41 93dff070fb0f2880806ef1ae5471ace37a97dd9e6aChris Lattnerextern char array2[\ 94dff070fb0f2880806ef1ae5471ace37a97dd9e6aChris Lattner_\ 95dff070fb0f2880806ef1ae5471ace37a97dd9e6aChris Lattner_LINE__ == 42 ? 1: -1]; /* line marker is location of first _ */ 96dff070fb0f2880806ef1ae5471ace37a97dd9e6aChris Lattner 9760c99d34cf28c002718b61c2f058d1e84923a634Michael Ilseman# 51 9860c99d34cf28c002718b61c2f058d1e84923a634Michael Ilsemanextern char array2_gnuline[\ 9960c99d34cf28c002718b61c2f058d1e84923a634Michael Ilseman_\ 10060c99d34cf28c002718b61c2f058d1e84923a634Michael Ilseman_LINE__ == 52 ? 1: -1]; /* line marker is location of first _ */ 10160c99d34cf28c002718b61c2f058d1e84923a634Michael Ilseman 102540f9ae1023bba27052c742cd92d0b32361b28ebFariborz Jahanian// rdar://11550996 103540f9ae1023bba27052c742cd92d0b32361b28ebFariborz Jahanian#line 0 "line-directive.c" // expected-warning {{#line directive with zero argument is a GNU extension}} 104540f9ae1023bba27052c742cd92d0b32361b28ebFariborz Jahanianundefined t; // expected-error {{unknown type name 'undefined'}} 105dff070fb0f2880806ef1ae5471ace37a97dd9e6aChris Lattner 106dff070fb0f2880806ef1ae5471ace37a97dd9e6aChris Lattner 107