[Tests] Making Lit Tests C++11 compatibile

Li, Charles via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 10 16:28:40 PST 2015


Hello Clang developers,


I am back again with another patch to make Clang Lit tests C++11 compatible.
There are 26 tests in total.
These are mainly diagnostics verifications where C++98/03 and C++11 differ.
I tried to preserve as much coverage as possible.
Unless otherwise stated, these tests have their RUN line expanded to run at: default C++ dialect, C++98 and C++11.

Here are the description of what I did with each in the order as they appear in the patch.

test/CXX/class.access/class.friend/p2-cxx03.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "non-class friend type 'T' is a C++11 extension"

test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p6.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "explicit conversion functions are a C++11 extension"

test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "befriending enumeration type 'enum E' is a C++11 extension"

test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3.cpp
  Verify for different diagnostic between C++03 and earlier vs C++11 and later
  C++03: conversion from string literal to 'char *' is deprecated
  C++11: ISO C++11 does not allow conversion from string literal to 'char *'

test/CodeGen/ubsan-type-blacklist.cpp
  Relaxed FileCheck string to accommodate changes in LLVM-IR on actual argument type for "bar".
  C++03: %class.Bar* @bar
  C++11: { i8** }* @bar

test/FixIt/fixit-vexing-parse.cpp
  Set this test to always run at C++98.
  C++11 coverage is provided by fixit-vexing-parse-cxx0x.cpp.

test/SemaCXX/addr-of-overloaded-function.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "default template arguments for a function template are a C++11 extension"

test/SemaCXX/const-cast.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "rvalue references are a C++11 extension"

test/SemaCXX/convert-to-bool.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "explicit conversion functions are a C++11 extension"

test/SemaCXX/copy-initialization.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "rvalue references are a C++11 extension"

test/SemaCXX/cxx0x-return-init-list.cpp
  Force this test to always run at C++03 (-std=c++98).
  This test verifies for very basic initializer return support in C++98.
  It checks for the following diagnostic at C++03
  "generalized initializer lists are a C++11 extension"

test/SemaCXX/decltype-crash.cpp
  Force this test to always run at C++03 (-std=c++98).
  This test verifies against decltype crash back in 2009.

test/SemaCXX/gnu-flags.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension"

test/SemaCXX/invalid-member-expr.cpp
  For code:  pair<int, int> z = minmax({});
  Empty initializer list is valid in C++11, but since minmax is not defined anywhere in the program, compiler issues an error.
  Therefore, in C++03 and earlier, we check for diagnostic: "expected expression"
  In C++11 and later, we check for diagnostic: "use of undeclared identifier 'minmax'"

test/SemaCXX/member-expr.cpp
  In C++11, "template" can be used outside of a template.
  Only verify the following diagnostic on C++03 and earlier.
  "'template' keyword outside of a template"

test/SemaCXX/member-pointer.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "use of enumeration in a nested name specifier is a C++11 extension"

test/SemaCXX/new-array-size-conv.cpp
  Only verify the following two diagnostic on C++03 and earlier.
  "implicit conversion from array size expression of type 'ValueInt' to integral type 'int' is a C++11 extension"
  "implicit conversion from array size expression of type 'ValueEnum' to enumeration type 'E' is a C++11 extension"

test/SemaCXX/offsetof.cpp
  Force this test to be C++98 only. Test offsetof-0x.cpp exists to verify for C++11 behavior
  Diagnostic change
  C++98: warning: offset of on non-POD type
  C++11: warning: offset of on non-standard-layout type

test/SemaCXX/printf-block.cpp
  This test verifies the diagnostic when trying to pass a non-POD struct then access its string value.
  C++11 allows passing non-POD objects via va_arg (5.2.2/7). But since the object does not have a c_str() method. So the compiler will issue a warning on that
  Here are the different diagnostics we verify for.
  C++03: cannot pass non-POD object of type 'HasNoCStr' to variadic block; expected type from format string was 'char *'
  C++11: format specifies type 'char *' but the argument has type 'HasNoCStr'

test/SemaCXX/undefined-internal.cpp
  Verify for different diagnostics depending on the dialect.
  C++03: "C++98 requires an accessible copy constructor"
  C++03: "copying parameter of type 'PR9323::(anonymous namespace)::Uncopyable' when binding a reference to a temporary would invoke an inaccessible constructor in C++98"

test/SemaObjCXX/crash.mm
  Only verify the following diagnostic on C++03 and earlier.
  "variadic templates are a C++11 extension"

test/SemaObjCXX/vararg-non-pod.mm
  Only verify the following diagnostic on C++03 and earlier.
  "cannot pass object of non-POD type 'C' through variadic method; call will abort at runtime"

test/SemaTemplate/default-arguments.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "default template arguments for a function template are a C++11 extension"

test/SemaTemplate/temp_class_spec_neg.cpp
  Only verify the following diagnostic on C++03 and earlier.
  "first declaration of class template partial specialization of 'A' outside namespace 'M' is a C++11 extension"

test/SemaTemplate/typename-specifier-4.cpp
  Keywords "template"and "typename" can be used outside a template in C++11.
  Only verify the following two diagnostics on C++03 and earlier.
  'template' keyword outside of a template
  'typename' occurs outside of a template

test/SemaTemplate/typename-specifier.cpp
  Only verify all occurrences the following diagnostics on C++03 and earlier.
  'typename' occurs outside of a template


Cheers,
Charles

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151111/74e40cf9/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 301.patch
Type: application/octet-stream
Size: 31261 bytes
Desc: 301.patch
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151111/74e40cf9/attachment-0001.obj>


More information about the cfe-commits mailing list