File: p12-0x.cpp

package info (click to toggle)
llvm-toolchain-15 1%3A15.0.6-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,554,644 kB
  • sloc: cpp: 5,922,452; ansic: 1,012,136; asm: 674,362; python: 191,568; objc: 73,855; f90: 42,327; lisp: 31,913; pascal: 11,973; javascript: 10,144; sh: 9,421; perl: 7,447; ml: 5,527; awk: 3,523; makefile: 2,520; xml: 885; cs: 573; fortran: 567
file content (38 lines) | stat: -rw-r--r-- 982 bytes parent folder | download | duplicates (38)
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
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s

struct S {
  int *j = &nonexistent; // expected-error {{use of undeclared identifier 'nonexistent'}}
  int *m = &n; // ok

  int n = f(); // ok
  int f();
};

int i = sizeof(S::m); // ok
int j = sizeof(S::m + 42); // ok


struct T {
  int n;
  static void f() {
    int a[n]; // expected-error {{invalid use of member 'n' in static member function}}
    int b[sizeof n]; // ok
  }
};

// Make sure the rule for unevaluated operands works correctly with typeid.
namespace std {
  class type_info;
}
class Poly { virtual ~Poly(); };
const std::type_info& k = typeid(S::m);
const std::type_info& m = typeid(*(Poly*)S::m); // expected-error {{invalid use of non-static data member}}
const std::type_info& n = typeid(*(Poly*)(0*sizeof S::m)); 

namespace PR11956 {
  struct X { char a; };
  struct Y { int f() { return sizeof(X::a); } }; // ok

  struct A { enum E {} E; };
  struct B { int f() { return sizeof(A::E); } }; // ok
}