<commit_before>// RUN: %clang_cc1 -fms-extensions -emit-llvm -o - %s | FileCheck %s

// CHECK: %struct.nested1 = type { i32, i32 }
typedef struct nested1 {
    int a1;
    int b1;
} NESTED1;

// CHECK: %struct.nested2 = type { i32, %struct.nested1, i32 }
struct nested2 {
    int a;
    NESTED1; 
    int b;
};

// CHECK: %struct.test = type { i32, %struct.nested2, i32 }
struct test {
    int    x;
    struct nested2; 
    int    y;
};


void foo()
{
  // CHECK: %var = alloca %struct.test, align 4
  struct test var;

  // CHECK: getelementptr inbounds %struct.test* %var, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.a;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %var, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 2
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.b;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %var, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested1* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.a1;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}var, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested1* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.b1;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %var, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.x;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %var, i32 0, i32 2
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.y;
}

void foo2(struct test* var)
{
  // CHECK: alloca %struct.test*, align 4
  // CHECK-NEXT: store %struct.test* %var, %struct.test** %{{.*}}, align 4
  // CHECK-NEXT: load %struct.test** %{{.*}}, align 4
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->a;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align 4
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 2
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->b;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align 4
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested1* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->a1;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align 4
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested1* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->b1;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align 4
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->x;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align 4
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 2
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->y;
}
<commit_msg>This test does not need to test the alignment of pointers.  Make it pass on 64-bit systems.<commit_after>// RUN: %clang_cc1 -fms-extensions -emit-llvm -o - %s | FileCheck %s

// CHECK: %struct.nested1 = type { i32, i32 }
typedef struct nested1 {
    int a1;
    int b1;
} NESTED1;

// CHECK: %struct.nested2 = type { i32, %struct.nested1, i32 }
struct nested2 {
    int a;
    NESTED1; 
    int b;
};

// CHECK: %struct.test = type { i32, %struct.nested2, i32 }
struct test {
    int    x;
    struct nested2; 
    int    y;
};


void foo()
{
  // CHECK: %var = alloca %struct.test, align 4
  struct test var;

  // CHECK: getelementptr inbounds %struct.test* %var, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.a;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %var, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 2
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.b;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %var, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested1* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.a1;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}var, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested1* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.b1;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %var, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.x;

  // CHECK-NEXT: getelementptr inbounds %struct.test* %var, i32 0, i32 2
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var.y;
}

void foo2(struct test* var)
{
  // CHECK: alloca %struct.test*, align
  // CHECK-NEXT: store %struct.test* %var, %struct.test** %{{.*}}, align
  // CHECK-NEXT: load %struct.test** %{{.*}}, align
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->a;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 2
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->b;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested1* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->a1;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested2* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: getelementptr inbounds %struct.nested1* %{{.*}}, i32 0, i32 1
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->b1;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 0
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->x;

  // CHECK-NEXT: load %struct.test** %{{.*}}, align
  // CHECK-NEXT: getelementptr inbounds %struct.test* %{{.*}}, i32 0, i32 2
  // CHECK-NEXT: load i32* %{{.*}}, align 4
  var->y;
}

{'fraction_non_alphanumeric': 0.20574491478834525, 'fraction_numerical': 0.06239692138537658, 'mean_word_length': 2.6512794781736075, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3849516', 'n_tokens_mistral': 3116, 'n_tokens_neox': 2715, 'n_words': 760}