OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.dg/] [parse/] [error11.C] - Blame information for rev 693

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 693 jeremybenn
// { dg-do compile }
2
// { dg-options "-fshow-column" }"
3
// Origin: Giovanni Bajo 
4
// Try to find out when the digraph '<:' is used as a mistake, and parse it
5
//  correctly to avoid cascaded errors.
6
 
7
struct B;
8
 
9
template 
10
struct Foo
11
{
12
  template 
13
  struct Nested
14
  {
15
    static void method(void) {}
16
  };
17
 
18
  void method(void) {
19
    typename Foo<::B>::template Nested<::B> n; // { dg-error "17:'<::' cannot begin" "17-begin" }
20
// { dg-message "17:'<:' is an alternate spelling" "17-alt" { target *-*-* } 19 }
21
// { dg-error "39:'<::' cannot begin" "39-begin" { target *-*-* } 19 }
22
// { dg-message "39:'<:' is an alternate spelling" "39-alt" { target *-*-* } 19 }
23
    n.template Nested::method();
24
    n.template Nested<::B>::method();  // { dg-error "22:'<::' cannot begin" "error" }
25
// { dg-message "22:'<:' is an alternate" "note" { target *-*-* } 24 }
26
    Nested::method();
27
    Nested<::B>::method(); // { dg-error "11:'<::' cannot begin" "error" }
28
// { dg-message "11:'<:' is an alternate" "note" { target *-*-* } 27 }
29
  }
30
};
31
 
32
template  struct Foo2 {};
33
template struct Foo2<::B>;  // { dg-error "21:'<::' cannot begin" "begin" }
34
// { dg-message "21:'<:' is an alternate" "alt" { target *-*-* } 33 }
35
// { dg-message "25:type/value mismatch" "mismatch" { target *-*-* } 33 }
36
// { dg-error "25:expected a constant" "const" { target *-*-* } 33 }
37
 
38
int value = 0;
39
 
40
void func(void)
41
{
42
  Foo<::B> f; // { dg-error "cannot begin" "begin" }
43
// { dg-message "alternate spelling" "alt" { target *-*-* } 42 }
44
  f.Foo::method();
45
  f.Foo<::B>::method(); // { dg-error "8:cannot begin" "begin" }
46
// { dg-message "8:alternate spelling" "alt" { target *-*-* } 45 }
47
 
48
  // Check cases where we the token sequence is the correct one, but there
49
  //  was no digraph or whitespaces in the middle, so we should not emit
50
  //  the special error message.
51
  Foo<: :B> k2;     // { dg-bogus "cannot begin|alternate spelling" "smart error should not be triggered here" }
52
  Foo[:B> k1;       // { dg-bogus "cannot begin|alternate spelling" "smart error should not be triggered here" }
53
// { dg-error "6:missing template arguments before" "template" { target *-*-* } { 51 } }
54
// { dg-error "9:expected primary-expression before ':' token" "primary" { target *-*-* } 51 }
55
// { dg-error "9:expected '\]' before ':' token" "backslash" { target *-*-* } 51 }
56
// { dg-error "9:expected ';' before ':' token" "semicolon" { target *-*-* } 51 }
57
// { dg-error "6:missing template arguments before" "template" { target *-*-* } 52 }
58
// { dg-error "7:expected primary-expression before ':' token" "primary" { target *-*-* } 52 }
59
// { dg-error "7:expected '\]' before ':' token" "backslash" { target *-*-* } 52 }
60
// { dg-error "7:expected ';' before ':' token" "semicolon" { target *-*-* } 52 }
61
//
62
  int Foo[2];
63
  Foo[::value] = 0;
64
}
65
 
66
template struct Foo<::B>; // { dg-error "20:'<::' cannot begin" "begin" }
67
// { dg-message "20:is an alternate" "alt" { target *-*-* } 66 }
68
 
69
// On the first error message, an additional note about the use of
70
//  -fpermissive should be present
71
// { dg-message "17:\\(if you use '-fpermissive' G\\+\\+ will accept your code\\)" "-fpermissive" { target *-*-* } 19 }

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.