14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 0 | FileCheck -check-prefix=DEF -check-prefix=NOSSP %s
24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 1 | FileCheck -check-prefix=DEF -check-prefix=SSP %s
34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 2 | FileCheck -check-prefix=DEF -check-prefix=SSPSTRONG %s
44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - %s -stack-protector 3 | FileCheck -check-prefix=DEF -check-prefix=SSPREQ %s
54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack | FileCheck -check-prefix=DEF -check-prefix=SAFESTACK-NOSSP %s
74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack -stack-protector 0 | FileCheck -check-prefix=DEF -check-prefix=SAFESTACK-NOSSP %s
84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack -stack-protector 1 | FileCheck -check-prefix=DEF -check-prefix=SAFESTACK-SSP %s
94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack -stack-protector 2 | FileCheck -check-prefix=DEF -check-prefix=SAFESTACK-SSPSTRONG %s
104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - %s -fsanitize=safe-stack -stack-protector 3 | FileCheck -check-prefix=DEF -check-prefix=SAFESTACK-SSPREQ %s
1197e948e9c9cc2db9f0cdc13e708fe1bd8c6d05a2Dmitri Gribenko
1297e948e9c9cc2db9f0cdc13e708fe1bd8c6d05a2Dmitri Gribenkotypedef __SIZE_TYPE__ size_t;
1345483f7a1b3e57b4603b141bee80596b2d4dd443Bill Wendling
1476bee4b756badefda61ce867c757cc31b7afa12fMike Stumpint printf(const char * _Format, ...);
1597e948e9c9cc2db9f0cdc13e708fe1bd8c6d05a2Dmitri Gribenkosize_t strlen(const char *s);
1697e948e9c9cc2db9f0cdc13e708fe1bd8c6d05a2Dmitri Gribenkochar *strcpy(char *s1, const char *s2);
1745483f7a1b3e57b4603b141bee80596b2d4dd443Bill Wendling
184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// DEF: define {{.*}}void @test1(i8* %msg) #[[A:.*]] {
1945483f7a1b3e57b4603b141bee80596b2d4dd443Bill Wendlingvoid test1(const char *msg) {
2045483f7a1b3e57b4603b141bee80596b2d4dd443Bill Wendling  char a[strlen(msg) + 1];
2145483f7a1b3e57b4603b141bee80596b2d4dd443Bill Wendling  strcpy(a, msg);
2245483f7a1b3e57b4603b141bee80596b2d4dd443Bill Wendling  printf("%s\n", a);
2345483f7a1b3e57b4603b141bee80596b2d4dd443Bill Wendling}
24f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling
254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOSSP-NOT: attributes #[[A]] = {{.*}} ssp
264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// SSP: attributes #[[A]] = {{.*}} ssp{{ }}
274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// SSPSTRONG: attributes #[[A]] = {{.*}} sspstrong
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// SSPREQ: attributes #[[A]] = {{.*}} sspreq
29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// SAFESTACK-NOSSP: attributes #[[A]] = {{.*}} safestack
314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// SAFESTACK-NOSSP-NOT: ssp
32b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar
334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// SAFESTACK-SSP: attributes #[[A]] = {{.*}} safestack ssp{{ }}
344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// SAFESTACK-SSPSTRONG: attributes #[[A]] = {{.*}} safestack sspstrong
354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// SAFESTACK-SSPREQ: attributes #[[A]] = {{.*}} safestack sspreq
36